Ограничить grep первым совпадением в строке - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь выполнить поиск для всех строк, которые имеют букву a перед первым периодом в строке.

Вот файл примера:

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

В примеревыше, я бы хотел grep эти 2 строки:

test123a.hello
stacka.tester.this

Это то, что я пробовал:

grep ".*a\." test.txt

Это получает 2 строки, которые я хочу, ноон также получает эту строку, которая мне не нужна, если a находится перед вторым периодом, а не первым:

example.more-test-a.xyz

Как мне ограничить его, чтобы получить только строкис a до первого периода?

Ответы [ 3 ]

2 голосов
/ 07 ноября 2019
$ 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
0 голосов
/ 07 ноября 2019

Вы можете попробовать [EDITED]

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

Это сделает ваш первый grep и отрицает что-либо с "a". предшествует точка.

0 голосов
/ 07 ноября 2019

если вы чувствуете много выходных данных, вы можете попробовать

grep ". * A."test.txt |меньше

...