2011-02-17 43 views
6

一个简单但烦人的事抑制庆典没有空白的输出:如何从消除空白处理文件时

text 

问题我我在文字之前需要这个空间(大多数情况下它是一个标签,但并不总是)。
所以问题是:如何在输入文件中获得与此脚本相同的行?


更新:好了,我改变了我的while read xwhile IFS= read x

echo "$x"给我正确的答案,没有剥离第一个标签,eval "echo $x"去掉这个标签。

那我该怎么办?

回答

13

read正在剥离空白。先擦拭$IFS

while IFS= read x 
do 
    echo "$x" 
done < file 
+0

太好了,谢谢。但是,请告诉我,为什么简单的阅读剥离白色空间?我认为它应该像现在这样通过线路。 – kasper 2011-02-17 01:50:10

+0

来自`help read`:“... $ IFS中的字符被识别为单词分隔符。” – 2011-02-17 01:52:25

1

将读取的全部内容放入名为REPLY的变量中。如果您使用REPLY而不是'x',则不必担心阅读的单词拆分和IFS等等。

我遇到了同样的麻烦,试图剥离文件名结尾的空格。 REPLY来救援:

find . -name '* ' -depth -print | while read; do mv -v "${REPLY}" "`echo "${REPLY}" | sed -e 's/ *$//'`"; done 
1

我发现问题的解决方案'eval“echo $ x”剥离此选项卡。'这应该可以解决它:

eval "echo \"$x\"" 

我认为这将导致内(转义)报价将与回波进行评估,而我认为无论是

eval "echo $x" 

eval echo "$x" 

原因要在echo之前评估引号,这意味着传递给echo的字符串没有引号,导致空白空间丢失。所以完整的答案是:

while IFS= read x 
do 
    eval "echo \"$x\"" 
done < file