grep 字符串集作为单行

grep 字符串集作为单行

如果我这样做的话,请在文本文件中说

grep FINAL *.msg

它返回

FINAL   COMPUTATIONS:  Elapsed Time: 000:30:55.65; CPU Time: 000:30:26.53  
FINAL   COMPUTATIONS:  Elapsed Time: 000:28:11.77; CPU Time: 000:27:41.36  

现在如果我做 for 循环

for line in `grep FINAL *.msg`

"$line"不将其视为"FINAL COMPUTATIONS: Elapsed Time: 000:30:55.65; CPU Time: 000:30:26.53"单行。

我该如何解决这个问题?

答案1

DopeGhoti 绝对正确,这里有一些可能更合适的东西。在进程替换的帮助下,从 grep 输出中逐行读取(模式应用于当前目录中的所有 *.msg 文件):

i=0; 
while read -r line; do 
    echo $((i++)) "$line"; 
done < <(grep "FINAL" ./*.msg)

代码片段没有 shellcheck 警告:)

答案2

它与 shell 分割输入的方式有关。请记住,除非另有说明,否则任何空格通常都会分割输入:

$ echo "Foo bar baz"
Foo bar baz
$ for word in $(echo "Foo bar baz"); do echo $word; done
Foo
bar
baz

相关内容