Grep Substring和Print Complete String仅与文件名一起使用

时间:2018-03-10 17:24:29

标签: bash sed grep

我在多个文件中有以下格式的数据

file1  123 dhhdha hkhdkhld ABC123.khdllajld
file2 48-385-83 ABC456.7070 
file3 CYX hdlhlahl gdiad
file4 lddf ABC456.12345

我正在尝试获取所有文件名和包含ABC的完整字符串(不是行)。我尝试使用grep,但它不打印完整的字符串,只打印子字符串。

grep -rniol '/path' -e 'ABC_' 

我希望输出为: -

file1 ABC123
file2 ABC456
file4 ABC456

有人可以帮我吗?

问候。

2 个答案:

答案 0 :(得分:1)

rseaman@Ubuntu-PC:~/temp/20180310/49211913$ echo "123 dhhdha hkhdkhld ABC123.khdllajld" > file1
rseaman@Ubuntu-PC:~/temp/20180310/49211913$ echo "48-385-83 ABC456.7070" > file2
rseaman@Ubuntu-PC:~/temp/20180310/49211913$ grep -rHoE 'ABC[^. ]*' *
file1:ABC123
file2:ABC456

-H强制打印文件名。

-E使用扩展正则表达式。

-o用于仅获取返回的正则表达式模式。

'ABC[^. ]*' =只有ABC后跟任何不是空格或.的字符。

如果你真的想要它的确切格式,你可以用空格替换:grep -rHoE 'ABC[^. ]*' * | tr ':' ' '

答案 1 :(得分:0)

o中移除-rniol,因为它代表“仅打印匹配行的匹配(非空)部分”(source)。