如何让 grep 搜索具有特定字符串的 ebuild 并生成仅包含 ebuild 位置的输出?

如何让 grep 搜索具有特定字符串的 ebuild 并生成仅包含 ebuild 位置的输出?

我一直在尝试创建一个 Bash 脚本函数,可用于在 Atom (文本编辑器)中搜索并打开带有所需字符串的 ebuild。这是我当前的 Bash 脚本函数(存储在~/.bashrc

function edsch {
  L=$(grep --include "*.ebuild" -R "$1" /usr/portage/$2)

  for i in ${L[@]}
  do
    atom $i
  done
}

我想用来在其中edsch .src.rpm x11-themes搜索类别中的 ebuild ,然后使用 Atom 打开结果。问题是它的内容引用了 ebuild 中字符串(例如)出现的位置,以及 ebuild 在我的文件系统上的位置(我想在循环中传递给它)。即在这个例子中有内容:x11-themes.src.rpm${L}.src.rpmatomfor${L}

/usr/portage/x11-themes/redhat-artwork/redhat-artwork-5.0.8-r4.ebuild:SRC_URI="mirror://gentoo/${P}-${MY_R}.fc7.src.rpm"
/usr/portage/x11-themes/lovelock-backgrounds/lovelock-backgrounds-14.91.1.1.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/laughlin-backgrounds/laughlin-backgrounds-14.1.0.3.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/solar-backgrounds/solar-backgrounds-0.92.0.5.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/goddard-backgrounds/goddard-backgrounds-13.0.0.3.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/leonidas-backgrounds/leonidas-backgrounds-11.0.0.2.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/verne-backgrounds/verne-backgrounds-15.91.0.1.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"
/usr/portage/x11-themes/constantine-backgrounds/constantine-backgrounds-12.1.1.4.ebuild:SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm"

每行的第一部分指的是 ebuild 在我的系统上的位置(例如,/usr/portage/x11-themes/constantine-backgrounds/constantine-backgrounds-12.1.1.4.ebuild在最后一行),而第二部分(例如,SRC_URI="mirror://fedora-dev/${SRC_PATH}/${PN}-$(replace_version_separator 3 -).fc${FEDORA}.src.rpm在最后一行)指的是字符串.src.rpm出现的行。有没有办法可以更改grep输出,以便仅显示文件系统上的 ebuild 位置?

答案1

您可以grep使用以下选项仅输出与搜索参数匹配的文件的文件名-l

function edsch {
  L=$(grep -l --include "*.ebuild" -R "$1" /usr/portage/$2)

  for i in ${L[@]}
  do
    atom $i
  done
}

这将生成您正在查找的输出并使用 Atom 打开相应的文件。

相关内容