如何停止读取剥离空格

问题描述 投票:0回答:2

我正在尝试解析一个文件,到处更改一行。我有一个像这样的简单循环:

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

如何从文件中读取一行而不删除前导空格?

linux shell
2个回答
3
投票

请参阅 http://mywiki.wooledge.org/BashFAQ/001。您需要取消设置

IFS
以避免剥离前导和尾随空格,并且您很可能还想使用
-r
:

while IFS= read -r line; do
    do_something_with "${line}"
done

1
投票

您可以像这样使用带有特殊变量的 read

REPLY
:

while IFS= read -r; do
  if *condition* then
    echo *someChangedOutput*
  else
    printf '%s\n' "$REPLY"
  fi
done < oldfile >> newfile
© www.soinside.com 2019 - 2024. All rights reserved.