【发布时间】:2019-04-30 12:48:45
【问题描述】:
我想获取匹配模式的行号,但我有一个条件是模式匹配应该有 'digits' 。
如果我使用
grep -ri -n "包 $i" 。 | grep -P '\d'
然后我会得到匹配模式的行的行号,但我也会得到没有任何数字的'package'行:
下面的输出显示了“package ca-certificates”的第 71 行,但还有 4 行我不需要的 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}
在脚本下面运行给了我精确的模式匹配,即“包”,但我不会得到它们的行号
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 digits 的输出
【问题讨论】:
-
不清楚,能否请您提供有关输入和预期输出的更多详细信息,然后告诉我们。
-
输出不应包含没有数字的行。
-
您问题中的哪个文本块是示例输入,哪个是预期输出?