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

Sou*_*ena 18 unix shell ksh

我想在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)

  • 通俗地说,你只为`read`语句指定空的'IFS`,以避免奇怪的副作用:`IFS = read line` (7认同)

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