我在多个文件中有以下格式的数据
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
有人可以帮我吗?
问候。
答案 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)。