首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用可变参数/参数创建bash函数以grep多个关键字/标记

如何使用可变参数/参数创建bash函数以grep多个关键字/标记
EN

Stack Overflow用户
提问于 2012-10-05 04:25:33
回答 2查看 1.5K关注 0票数 0

我在vim中使用:!grep "tag1" filename | grep "tag2" filename | grep -n "tag3 or more" filename命令,根据代码片段的标记(代码片段顶部的简单注释)在一个大文件中搜索代码片段,这与firefox的标记功能类似。我使用片段来记住棘手的事情。

每次写出来都很痛苦。我想创建一个别名或函数来执行以下操作:

代码语言:javascript
复制
:!greptag tag1 tag2 ... tag39

它应该搜索当前文档,并返回包含所有标签的行。

Vim被设置为交互式shell模式,这样它就可以解析我的bashrc中的别名/函数。

代码语言:javascript
复制
set shellcmdflag=-ic "lets vim use bashrc

如何在bash中构造允许变量参数的函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-05 05:10:02

您还可以使用sed:

代码语言:javascript
复制
sed e '/tag1/!d;/tag2/!d;.../tagN/!d' filename

/tag1/!命令是一个地址前缀,用于告诉sed仅在该行包含tag1时才执行该命令。我们执行的命令是"d",用来删除行。

然后,函数(在.bashrc中)将是:

代码语言:javascript
复制
greptags () {
    local filename="$1"
    shift
    sed "$filename" -e "$(echo "$@" | sed -e 's,\([^ ]*\) *,/\1/\!d;,g')"
}

请注意,我们使用另一个sed命令将参数解析为最终的sed命令列表。基本上,对于每个单词(没有空格),我们删除它后面的空格,并将其放入/tagN/!d;命令形式。

并将其称为:

代码语言:javascript
复制
greptags filename tag1 tag2 tag3 tag4

希望这会有帮助=)

票数 2
EN

Stack Overflow用户

发布于 2012-10-05 04:34:22

这样如何:

代码语言:javascript
复制
greptags() {
 if [[ -z "$1" ]] ; then
  cat
 else
  local t="$1" ; shift
  greptags "$@" | grep "$t"
 fi
}
greptag() {
 local f="$1" ; shift
 local t="$2" ; shift
 grep "$t" "$f" | greptags "$@"
}

(未经测试,可能不完全是您想要的,但说明了它的想法)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12735315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档