我想在Unix shell脚本中逐行读取文件。行可以包含前导和尾随空格,我想在行中读取这些空格。 我尝试使用“while read line”但读取命令是从行中删除空格字符:( 如果文件中的行是: -
abcd efghijk
abcdefg hijk
行应该被理解为: -
1) "abcd efghijk"
2) " abcdefg hijk"
我尝试的是这个(没有用): -
while read line
do
echo $line
done < file.txt
我想要包含空格和制表符的行。 请提出建议。
答案 0 :(得分:25)
试试这个,
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>''
答案 1 :(得分:17)
您想要读取原始行以避免输入中出现反斜杠问题(使用-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"
才能使分词不会将行拆分为单独的单词 - 从而丢失多个空格序列。