文件的顺序在 grapping 和回显到 for 循环时被破坏

文件的顺序在 grapping 和回显到 for 循环时被破坏

我想将 for 循环中的 grep 的结果写入文件,保留原始文件结构。原始文件:

$cat newtest1
some_text
/homes/myself/joz
ivan petrov - 20/10/19
new customer:
/homes/myself/silvia
john smith - 30/11/19
old customer:
some_text

我在 for 循环中使用 grep 并得到以下结果:

$for i in `cat newtest1 | grep customer -B2`; do echo $i; done
/homes/myself/joz
ivan
petrov
-

等等。文件的结构发生了变化。我尝试了 printf - 结果相同。问题:如何在 for 循环中使用 grep 保留文件的结构?

答案1

你需要引用变量和命令替换的结果来防止单词分裂:

for i in "$(<newtest1 grep customer -B2)"; do
  echo "$i"
done

当然,如果只是输出匹配的行,您不需要循环for,但我想您想用这些行做其他事情。无论如何,您都不需要cat,您可以用grep打开文件,grep … newtest1或者让 shell 打开它并将其内容分配给grep的 stdin,就像我上面所做的那样。后者有许多优点,在这个很棒的答案中解释如下:何时应使用输入重定向?

相关内容