2014-04-11 41 views
1

我使用grep来搜索通过包含在一个VAR如何修改grep的输出结果:让每个结果中的每一行

代码在这里一个文件中的模式:

result=`grep "$pattern" $file` 
echo $result 

结果: A) somewords B)somelines C)somenumbers

在1行上打印结果。我想有一个结果为线

像:

A) somewords 
B) somelines 
C) somenumbers 

我哪有?

感谢

回答

2

只需注明您的$result变量和换行符将被保留:

result=$(grep "$pattern" $file) 
echo "$result" 

这部作品的原因是,当你包围在bash的双引号的东西,那些引号内一切都处理作为一个单词。这意味着它不会受word splitting的影响。另请参见:http://mywiki.wooledge.org/WordSplitting

有效,当您使用$result,它就会被扩展到这一点(因为换行符作为分隔符处理):

echo A) somewords B) somelines C) somenumbers 

当您使用"$result",避免了分词时,它会扩展到这样的:

echo "A) somewords 
B) somelines 
C) somenumbers" 

附加说明:使用$(...)而不是反引号提高了可读性,也更便于携带。

+0

谢谢!你能解释我,为什么双引号修改输出? – user2302636

+1

是的,会编辑。 –

+2

@ user2302636如果没有引号,变量将受到分词和匹配的影响,请参阅http://mywiki.wooledge.org/BashPitfalls#echo_.24foo了解更多信息。 –