我正在尝试解析一个文件,到处更改一行。我有一个像这样的简单循环:
while read line; do
if *condition* then ;
echo *someChangedOutput* >> newfile
else
echo "$line" >> newfile
fi
done < oldfile
我的问题是“oldfile”中的大多数行都有前导空格。当我将它们读入变量
line
时,前导空格被剥离 - 因此当我将 "$line"
回显为“newfile” 时,前导空格会丢失。
例如,如果“oldfile”是:
line1
line2
line3
“newfile”被创建为
line1
line2
line3
如何从文件中读取一行而不删除前导空格?
请参阅 http://mywiki.wooledge.org/BashFAQ/001。您需要取消设置
IFS
以避免剥离前导和尾随空格,并且您很可能还想使用 -r
:
while IFS= read -r line; do
do_something_with "${line}"
done
您可以像这样使用带有特殊变量的 read
REPLY
:
while IFS= read -r; do
if *condition* then
echo *someChangedOutput*
else
printf '%s\n' "$REPLY"
fi
done < oldfile >> newfile