1

Я знаю, что есть много примеров не жадных регулярных выражений с grep, но у меня проблемы с моим конкретным случаем.

Мой файл содержит строки, похожие на:

[X12345.Yabc.Z7989].[ALPHA/BRAVO].[CHARLIE.DELTA]

и я пытаюсь разобрать только часть X12345 .
То есть часть, начинающаяся с X и до первого периода (.)

Мой самый близкий пример до сих пор:

grep -Eo "X(.*?)\."  inputfile

Но это слишком жадный (хотя я думаю, что использовал .*? должным образом.

Может ли кто-нибудь помочь мне найти правильное выражение?

1 ответ1

2

Вы используете .* Правильно, но, как вы заметили, это жадно поглощает столько символов, сколько может в вашем матче, потому что . соответствует любому персонажу. Вы могли бы сделать:

grep -Eo "X([^.]*?)\." inputFile

Это соответствует X, сопровождаемому любой последовательностью длины любой не точки ([^.]*) До некоторого символа (?) и точка (\.). Вы говорите, что интересуетесь всем между первым X и первым. хотя, так что вы могли бы упростить это дальше:

grep -Eo "X[^.]*\." inputFile

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .