Unixシェルスクリプトで1行ずつファイルを読みたい。行には先頭と末尾のスペースを含めることができますが、行内のこれらのスペースも読みたいです。 「while read line」で試しましたが、readコマンドは行からスペース文字を削除しています:(ファイル内の行が次の場合の例:-
abcd efghijk
abcdefg hijk
行は次のように読む必要があります:-1) "abcd efghijk" 2) " abcdefg hijk"
私が試したのはこれです(うまくいきませんでした):-
while read line
do
echo $line
done < file.txt
スペースとタブ文字を含む行が必要です。方法を提案してください。
これを試して、
IFS=''
while read line
do
echo $line
done < file.txt
編集:
man bash
から
IFS - The Internal Field Separator that is used for Word
splitting after expansion and to split lines into words
with the read builtin command. The default value is
``<space><tab><newline>''
入力のバックスラッシュの問題を回避するためにraw行を読みたい(-r
を使用):
while read -r line; do
printf "<%s>\n" "$line"
done < file.txt
これにより、行内に空白が保持されますが、先頭と末尾の空白は削除されます。これらも保持するには、次のようにIFSを空に設定します
while IFS= read -r line; do
printf "%s\n" "$line"
done < file.txt
cat < file.txt
が改行で終わる限り、これはfile.txt
と同等になりました。
Wordの分割によって行が個別の単語に分割されないようにするため、"$line"
を二重引用符で囲む必要があります。このため、複数の空白シーケンスが失われます。