使用bash逐行阅读并保留空间
当我使用“cat test.file”时,它会显示
1 2 3 4
当我使用bash文件时,
cat test.file | while read data do echo "$data" done
它会显示
1 2 3 4
我怎么能像原来的testing文件一样做出结果呢?
IFS='' cat test.file | while read data do echo "$data" done
我意识到,你可能已经从真正需要pipe道的东西简化了这个例子,但是在别人这样说之前:
IFS='' while read data; do echo "$data" done < test.file
实际上,如果你不提供参数给“read”调用,read将会设置一个名为$ REPLY的默认variables,它将保留空格。 所以你可以这样做:
$ cat test.file | while read; do echo "$REPLY"; done
只是为了补充DigitalRoss的回应。 对于这种情况,你想改变IFS只是为了这个命令,你可以使用花括号。 如果这样做,IFS的值只会在块内部更改。 喜欢这个:
echo ' word1 word2' | { IFS='' ; while read line ; do echo "$line" check ; done ; }
输出将是(保持空格):
word1 check word2 check
read data
将通过IFS (通常是“\ t \ n”)分割数据。 这将为你保留空白:
var=$(cat test.file) echo "$var"
或者,使用一个好的文件parsing工具,比如awk
awk '{ # do your stuff print }' file