19

Unix シェル スクリプトでファイルを 1 行ずつ読みたい。行には先頭と末尾のスペースを含めることができ、行内にもそれらのスペースを読みたいです。「while read line」で試しましたが、読み取りコマンドが行からスペース文字を削除しています:(ファイル内の行が次の場合の例:-

abcd efghijk
 abcdefg hijk

行は次のように読む必要があります:- 1) "abcd efghijk" 2) " abcdefg hijk"

私が試したのはこれです(うまくいきませんでした):-

while read line
do
   echo $line
done < file.txt

スペースとタブ文字を含む行が必要です。方法を提案してください。

4

2 に答える 2

26

これを試して、

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>''
于 2013-05-28T11:04:01.150 に答える
18

入力内のバックスラッシュの問題を回避するために生の行を読みたいとします ( を使用-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

"$line"単語分割によって行が別々の単語に分割されないようにするために、二重引用符を付ける必要があることに注意してください。これにより、複数の空白シーケンスが失われます。

于 2013-05-28T11:04:32.260 に答える