我想在Unix shell脚本中逐行读取文件.行可以包含前导和尾随空格,我想在行中读取这些空格.我尝试了"while read line"但是read命令正在从行中删除空格字符:(如果文件中的行是: -
abcd efghijk
abcdefg hijk
Run Code Online (Sandbox Code Playgroud)
行应该读作: -
1) "abcd efghijk"
2) " abcdefg hijk"
我试过的是这个(没用): -
while read line
do
echo $line
done < file.txt
Run Code Online (Sandbox Code Playgroud)
我想要包含空格和制表符的行.请建议一个方法.
sat*_*sat 26
试试这个,
IFS=''
while read line
do
echo $line
done < file.txt
Run Code Online (Sandbox Code Playgroud)
编辑:
从 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>''
Run Code Online (Sandbox Code Playgroud)
Jen*_*ens 17
您想要读取原始行以避免输入中的反斜杠问题(使用-r):
while read -r line; do
printf "<%s>\n" "$line"
done < file.txt
Run Code Online (Sandbox Code Playgroud)
这将保留行内的空格,但会删除前导和尾随空格.为了保留这些,请将IFS设置为空,如
while IFS= read -r line; do
printf "%s\n" "$line"
done < file.txt
Run Code Online (Sandbox Code Playgroud)
现在cat < file.txt只要file.txt有换行符即可.
请注意,您必须双引号"$line"才能使单词拆分不将该行拆分为单独的单词 - 从而丢失多个空格序列.