Grep 匹配和循环目录并存储在不同的输出文件中

Grep 匹配和循环目录并存储在不同的输出文件中

我有3个文件如下:

1.out
a 
b
c

2.out
g
h
abcd
a 
h

3.out
b
c
e
a

我需要文件中模式“a”匹配并存储在新的相应文件中的上方一行和下方一行

for file in *.out;do grep -A 1 -B 1 'a' $file > $file_output.txt; done

答案1

_(下划线)是变量名称中的有效字符。

这意味着$file_output.txt使用该变量file_output并将字符串附加.txt到其值。如果该变量不存在,那么您现在有一个名为.txt.

要告诉 shell 变量名称在 之前结束_,请在其名称周围使用大括号:

"${file}_output.txt"

file 1.out另请注意变量扩展的引用(如果当前目录中的任何文件的名称中包含空格 ( ) 或文件名通配符([123].out或类似字符) ,则需要引用*.out)。

最终循环:

for file in *.out; do
    grep -A 1 -B 1 'a' "$file" >"${file}_output.txt"
done

相关内容