如何使用bash在一行上只找到一个模式的文本文件

时间:2019-05-24 14:39:49

标签: bash grep

我正在尝试使用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查找模式?

1 个答案:

答案 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