我有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