在Unix Shell脚本中逐行(带空格)读取文件-问题
我想在Unix shell脚本中逐行读取文件。行可以包含前导空格和尾随空格,我想在行中也读取这些空格。 我尝试在读取行时使用,但读取命令正在从行中删除空格字符: 如果文件中的行是:-在Unix Shell脚本中逐行(带空格)读取文件-问题,shell,unix,ksh,Shell,Unix,Ksh,我想在Unix shell脚本中逐行读取文件。行可以包含前导空格和尾随空格,我想在行中也读取这些空格。 我尝试在读取行时使用,但读取命令正在从行中删除空格字符: 如果文件中的行是:- abcd efghijk abcdefg hijk 第行应理解为:- 1 abcd efghijk 2 abcdefg hijk 我所尝试的是这一点,但不起作用:- while read line do echo $line done < file.txt 我想要一行,包括空格和制表符。 请建议一
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
您希望读取原始行以避免输入use-r中出现反斜杠问题:
这将保留行内的空格,但删除前导空格和尾随空格。要同时保留这些,请将IFS设置为空,如中所示
while IFS= read -r line; do
printf "%s\n" "$line"
done < file.txt
现在,只要file.txt以换行符结尾,它就相当于cat请注意,您必须双引号$line,以防止单词拆分将行拆分为单独的单词,从而丢失多个空格序列。习惯用法是,您将仅为read语句指定空IFS,以避免奇怪的副作用:而IFS=read line
while read -r line; do
printf "<%s>\n" "$line"
done < file.txt
while IFS= read -r line; do
printf "%s\n" "$line"
done < file.txt