我想将 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,就像我上面所做的那样。后者有许多优点,在这个很棒的答案中解释如下:何时应使用输入重定向?