将grep限制为每行第一个匹配项

我正在尝试对行中第一个句点之前所有带有字母a的行进行grep。

这是一个示例文件:

test123a.hello
example.more-test-a.xyz
stacka.tester.this
nothing.nothing.nothing

在上面的示例中,我想grep这两行:

test123a.hello
stacka.tester.this

这是我尝试过的:

grep ".*a\." test.txt

这是我想要的两行,但是我也不想得到这行,因为a在第二个句号的前面,而不是在第一个句号的前面:

example.more-test-a.xyz

如何将其限制为仅在第一个期间之前获得a的行?

haobeiju 回答:将grep限制为每行第一个匹配项

$ grep '^[^.]*a\.' test.txt
test123a.hello
stacka.tester.this
  • ^限制行首匹配
  • [^.]*可以匹配除.字符以外的任何其他字符,零次或多次
  • a从字面上匹配字符a
  • \.从字面上匹配字符.


您还可以在此处使用awk,它更适合基于字段的处理

$ # 'a' as last character for first field
$ awk -F'.' '$1 ~ /a$/' test.txt
test123a.hello
stacka.tester.this

$ # 'a' as last character for second field
$ awk -F'.' '$2 ~ /a$/' test.txt
example.more-test-a.xyz
,

如果感觉输出很多,可以尝试

  

grep“。* a。” test.txt |少

,

您可以尝试[编辑]

grep ".*a." test.txt | grep -v "\([^a]\.\)\{1,\}.*a."

这将是您的第一个grep并拒绝任何带有“ a”的内容。前面加一个点。

本文链接:https://www.f2er.com/3147832.html

大家都在问