Выражение для любого числа чисел, включая точки, затем пробел и открывающую скобку? - PullRequest
2 голосов
/ 18 июня 2019
word-3.3.7          (in xyz)
word-3.30.7          (in lib)
word-3.56          (in pwd)
word-3        (in abc)
word          (in lib)
word-32.3          (in pqr)
word-32.3.5          (in sfw)

Я хочу grep захватить эти выходные данные из списка случайного текста.

В основном, регулярное выражение grep, которое захватывает следующий обобщенный текст:

word || word-[любое количество чисел с '.'] [любое количество пробелов / пробельных символов] [(in)

Я пытался:

egrep "word [(in ]|word-[0-9].[0-9].[0-9] [(in ]"

Но это не очень эффективно, так как пробелыограничено.

Ответы [ 2 ]

3 голосов
/ 18 июня 2019

Вы можете использовать это grep:

grep -oE '^([_[:alnum:]]+|[_[:alnum:]]+-[.0-9]+)[[:space:]]+\(in' file

word-3.3.7          (in
word-3.30.7          (in
word-3.56          (in
word-3        (in
word          (in
word-32.3          (in
word-32.3.5          (in

Regex Подробности:

  • ^: Начало строки
  • (: начало группы
  • [_[:alnum:]]+: совпадение 1+ символов слова
  • |: ИЛИ
  • [_[:alnum:]]+-[.0-9]+: Совпадение 1+ символов слова, за которыми следуют - и 1+ цифры или точки
  • );Конечная группа
  • [[:space:]]+: совпадение с 1 + пробельными символами
  • \(in: сопоставление с литералом ( и in
1 голос
/ 18 июня 2019

С GNU grep вы можете использовать:

grep -oP '^word(?:-\d+(?:\.\d+)*)*\s+\(in' word 
word-3.3.7          (in
word-3.30.7          (in
word-3.56          (in
word-3        (in
word          (in
word-32.3          (in
word-32.3.5          (in

где word это файл:

some stuff
more stuff
word stuff
word-3.3.7          (in xyz)
word-3.30.7          (in lib)
word-3.56          (in pwd)
word-3        (in abc)
word          (in lib)
word-32.3          (in pqr)
word-32.3.5          (in sfw)
word-2 stuff
more stuff
some stuff

Пояснение:

  • -oP используются для отображения только выходных данных и использования регулярных выражений в стиле Perl
  • ^word строки, начинающиеся с word
  • (?: ) группа без захвата
  • -\d+ тире, за которым следуют несколько цифр, например, -3
  • (?:\.\d+)* это будет соответствовать .30 или .30.7, точка с последующими цифрами от 0 до N раз
  • \s+\(in пробелы, за которыми следуют ( и in

Демо-версия:

https://regex101.com/r/0fYFcD/1/

Примечание: это регулярное выражение немного более ограничительно, чем анубхава , поскольку подразумевает, что строка начинается именно с word

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...