соответствие шаблону grep номеру строки - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу получить номер строки совпавшего шаблона, но у меня есть условие, чтобы в шаблоне совпадения были «цифры».Если я использую
grep -ri -n "package $ i".|grep -P '\ d'
тогда я получу номер строки, соответствующий шаблону строк, но также получу строки с 'package' без каких-либо цифр:

Ниже выводится номер строки 71для «пакетов CA-сертификатов», но есть еще четыре строки для gluterfs, которые мне не нужны.Мне не нужны эти строки, так как в них нет цифр.

for i in $(awk '{print $1}' ~/Version-pkgs)
do
grep -ri -n   "package $i " . | grep -P '\d'
done

sh search-version-pkgs.sh
./core.pkglist:71:package ca-certificates         2017.2.14   65.0.1.el6_9               arch noarch
./dev.pkglist:1343:package glusterfs-devel \
./dev.pkglist:1346:package glusterfs-api-devel \
./dev.pkglist:1346:package glusterfs-api-devel \
./dev.pkglist:1346:package glusterfs-api-devel \
./dev.pkglist:1343:package glusterfs-devel \
./core.pkglist:234:package initscripts             9.03.58     1.0.3.el6_9.2prerel7.6.0.0.0_88.51.0            arch ${bestArch}
./core.pkglist:397:package nspr                    4.13.1      1.el6
./dev.pkglist:859:package nspr-devel \
./dev.pkglist:859:package nspr-devel \
./core.pkglist:401:package nss                     3.28.4      4.0.1.el6_9       arch ${bestArch}

Запуск сценария ниже дает мне точное совпадение с шаблоном, то есть 'package', но я не получу номер строки из них

for i in $(awk '{print $1}' ~/Version-pkgs)
do
egrep -ri    "package $i " . | grep -P '\d'
done

sh search-version-pkgs.sh
./core.pkglist:package ca-certificates         2017.2.14   65.0.1.el6_9               arch noarch
./core.pkglist:package initscripts             9.03.58     1.0.3.el6_9.2prerel7.6.0.0.0_88.51.0            arch ${bestArch}
./core.pkglist:package nspr                    4.13.1      1.el6
./core.pkglist:package nss                     3.28.4      4.0.1.el6_9       arch ${bestArch}
./core.pkglist:package nss-util                3.28.4      1.el6_9          arch ${bestArch}
./core.pkglist:package tzdata                  2018e       3.el6    arch noarch

Как получить выходные данные с номером строки и совпадением шаблона в виде файла: lineno.: Package pkgname digits

1 Ответ

0 голосов
/ 28 ноября 2018
for i in $(cut -f1 ~/Version-pkgs)
do
    grep -rin   "package $i.*[0-9]" .
done

нет необходимости использовать grep дважды

Oneliner:

grep -rinf <(sed -E 's,([^ ]*).*,package \1.*[0-9],' ~/Version-pkgs) .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...