grep regex для возврата числовых значений между строк - PullRequest
0 голосов
/ 16 апреля 2020

, поэтому я запускаю команду linux

ls /etc/systemd/system | grep -o -E "[0-9]+"

, которая должна возвращать только числовые значения, единственная проблема, она возвращает некоторые нежелательные числовые значения из частей результатов, которые я не хочу, я хочу только числовые значения от - до .service, например test-blah4-1321.service, я просто хочу, чтобы он возвращал 1321. Что мне здесь не хватает?

пример

$ ls /etc/systemd/system
test.service                                test-blah4-1321.service  test-blah2.service                          test-blah5-1387.service  test-blah3-1521.service

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

GNU grep имеет параметр -P для регулярных выражений в стиле perl и параметр -o для печати только того, что соответствует шаблону. Их можно объединить с помощью проверочных утверждений (описанных в разделе «Расширенные шаблоны» на странице perlre *1003*), чтобы удалить часть шаблона grep из того, что определено для соответствия -o.

Источник

Применительно к вашему примеру это будет:

echo test-blah4-1321.service | grep -oP '(?<=-)\d+(?=\.service)'
0 голосов
/ 16 апреля 2020

когда мне нужно заглянуть в будущее или заглянуть за тесты, я обычно переключаюсь на Perl однострочник. это должно сработать.

echo test-blah4-1321.service | perl -ne 'm/(?<=-)(\d+)(?=\.service)/g; print "$1\n";'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...