grep模式与行号匹配

时间:2018-11-28 15:02:16

标签: awk sed grep

我想获取匹配模式的行号,但我有一个条件,即模式匹配应具有“ digits”。 如果我使用
grep -ri -n“软件包$ i”。 | grep -P'\ d'
那么我将获得匹配模式的行的行号,但也会获得带有'package'的行而没有任何数字:

下面的输出显示了'package ca-certificates'的第71行,但是我不需要的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

如何获取行号与模式匹配的输出,如file:lineno。:package pkgname位数

1 个答案:

答案 0 :(得分:2)

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) .