在Unix Shell脚本中逐行读取文件(带空格) - 问题

时间:2013-05-28 10:50:08

标签: shell unix ksh

我想在Unix shell脚本中逐行读取文件。行可以包含前导和尾随空格,我想在行中读取这些空格。 我尝试使用“while read line”但读取命令是从行中删除空格字符:( 如果文件中的行是: -

abcd efghijk
 abcdefg hijk

行应该被理解为: - 1) "abcd efghijk" 2) " abcdefg hijk"

我尝试的是这个(没有用): -

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

我想要包含空格和制表符的行。 请提出建议。

2 个答案:

答案 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"才能使分词不会将行拆分为单独的单词 - 从而丢失多个空格序列。