我想将grep结果分配给变量以供进一步使用:
lines=`cat abc.txt | grep "hello"`
但我发现$ lines不再包含换行符。所以当我做的时候
echo $lines
只打印一行。我如何保留换行符,所以当我回显$行时,它与cat abc.txt |相同grep“你好”。
答案 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字符