我正在尝试使用bash查找文本文件,该文件仅包含文件1行中的特定模式。
例如,我有以下文本文件:
1234123 123412341 0000 23423 23422
121231 123123 12312 12312 1231
567 567 43 234 12
0000
929 020 040 040 0000
此文件包含一行(第4行),该行专门具有模式0000
。
但是,我尝试了ls | grep 0000
,它还返回了模式位于文件其他位置的文件,而不一定是一行上的“ solo”。
您如何使用仅在文件单行中显示的bash查找模式?
答案 0 :(得分:1)
假设我们有四个输入文件:
$ head file*
==> file1 <==
0000
0000
==> file2 <==
abcd
0000
abcd
==> file3 <==
0000x
==> file4 <==
abcd
file4
根本不包含模式,file3
包含模式,但是它不是一行,file1
有多行仅包含模式,而file2
仅与模式仅一行。
要获取所有包含该模式的文件,请执行以下操作:
$ grep -l '0000' file*
file1
file2
file3
要获取所有只包含模式的行的文件:
$ grep -lx '0000' file*
file1
file2
如果您只希望文件仅包含一行,而模式只包含一行,则可以使用-c
首先获得计数:
$ grep -xc '0000' file*
file1:2
file2:1
file3:0
file4:0
然后使用awk仅打印完全匹配的文件:
$ grep -xc '0000' file* | awk -F: '$2==1 {print $1}'
file2
使用GNU awk,您也可以直接执行以下操作:
$ awk 'BEGINFILE {c=0} /^0000$/ {++c} ENDFILE {if (c==1) print FILENAME}' file*
file2