linux - 如何创建具有可变参数/参数的 bash 函数以 grep 多个关键字/标签

标签 linux bash parameters tags grep

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

每次写出来都很痛苦。我想做一个别名,或者函数来做这样的事情:

:!greptag tag1 tag2 ... tag39

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

Vim 设置为交互式 shell 模式,以便它可以解析我的 bashrc 以获取别名/函数。

set shellcmdflag=-ic "lets vim use bashrc

我如何在 bash 中构造一个允许这样的可变参数的函数?

最佳答案

你也可以使用 sed:

sed e '/tag1/!d;/tag2/!d;.../tagN/!d' filename

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

函数(在 .bashrc 中)将是:

greptags () {
    local filename="$1"
    shift
    sed "$filename" -e "$(echo "$@" | sed -e 's,\([^ ]*\) *,/\1/\!d;,g')"
}

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

并称它为:

greptags filename tag1 tag2 tag3 tag4

希望这有帮助 =)

关于linux - 如何创建具有可变参数/参数的 bash 函数以 grep 多个关键字/标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12735315/

相关文章:

c - 在 C 中使用运算符 < 从文件重定向

c - 如何在 C 中使用 GTK 使用 G_CALLBACK 获取输入值

c - "char s[static 10]"等函数的数组参数中 static 关键字的用途是什么?

c - 在 Linux 中跨共享库调用保留数据

arrays - 仅根据相同的索引号对齐数组?

android - 在 bash 脚本中退出 adb shell logcat

ruby-on-rails - 如何在 RoR 中调用方法并发送新参数?

linux - 如何在 Perl 中找到图形的连通分量?

linux - 自定义 POP3 客户端的存储/数据库解决方案?

linux - 在 linux 中使用 awk 合并两个文件