如何用换行保留grep结果?

时间:2011-03-22 03:42:24

标签: bash

我想将grep结果分配给变量以供进一步使用:

lines=`cat abc.txt | grep "hello"`

但我发现$ lines不再包含换行符。所以当我做的时候

echo $lines

只打印一行。我如何保留换行符,所以当我回显$行时,它与cat abc.txt |相同grep“你好”。

2 个答案:

答案 0 :(得分:41)

你想说

echo "$lines"

而不是

echo $lines

详细说明:

echo $lines表示“通过将$lines替换为名为lines的变量的内容来形成新命令,将其拆分为空白以形成零{或}个新参数echo 1}}命令。例如:

lines='1 2 3'
echo $lines   # equivalent to "echo 1 2 3"
lines='1   2   3'
echo $lines   # also equivalent to "echo 1 2 3"
lines="1
2
3"
echo $lines   # also equivalent to "echo 1 2 3"

所有这些示例都是等效的,因为shell忽略了存储在变量lines中的各个单词之间的特定类型的空格。实际上,更确切地说,shell将变量的内容拆分为特殊IFS(内部字段分隔符)变量的字符,该变量默认(至少在我的bash版本中)为三个字符空间,标签和换行符。

另一方面,

echo "$lines"意味着根据变量lines的确切值形成一个新参数。

有关详细信息,请参阅bash手册页的“扩展”和“Word拆分”部分。

答案 1 :(得分:0)

使用Windows端口进行grep(不是原始问题,我知道并且不适用于* nix)。我发现-U很好地解决了这个问题。

来自--help

  

-U, - binary不会在EOL(MSDOS)中删除CR字符