您好,匿名用户
随意问技术百科期待您的加入

Shell里如何过滤出文件中匹配某个规则的行以及它上面的注释行

0 投票

例如,如何从 Vim 的配置文件 .vimrc 中过滤出所有快捷键映射的配置行以及它前面紧挨着的注释行?

我知道以下命令可以过滤出配置行:

sed -n '/^[^"].*<leader>/p' .vimrc

但是,如何连同该行前面紧邻的所有注释行也过滤出来,请高手帮忙解答,谢谢!

用户头像 提问 2013年 9月11日 @ Quinn 上等兵 (107 威望)
分享到:

1个回答

+1 投票
 
最佳答案

sed 是流编辑器,要解决这个问题要一些技巧,sed -n '/^"/{H;d};/^"/!{/<leader>/{H;x;p;s/.*//;x;d};/<leader>/!{s/.*//;x;d};};' vimrc 应该能够达到要求,sed 命令教程请见 http://www.grymoire.com/Unix/Sed.html,详细说明如下。

sed -n '
/^"/ {
    # 匹配到注释行,附加到缓冲空间
    H
    # 删除模式空间,开始新一轮匹配
    d
}
/^"/ !{
    # 匹配到非注释行
    /<leader>/ {
        # 匹配到目标行,附加到缓冲空间
        H
        # 交换缓冲空间和模式空间
        x
        # 打印模式空间
        p
        # 清空缓冲空间
        s/.*//
        x
        # 删除模式空间,开始新一轮匹配
        d
    }
    /<leader>/ !{
        # 非目标行,清除缓冲空间
        s/.*//
        x
        # 删除模式空间,开始新一轮匹配
        d
    }
}' vimrc

这类问题可能还是用 awk 比较合适。

用户头像 回复 2013年 9月11日 @ Emiya Shirou 上等兵 (438 威望)
选中 2013年 9月7日 @Quinn
提一个问题:

相关问题

0 投票
1 回复 39 阅读
用户头像 提问 2013年 11月1日 @ Lancer 上等兵 (183 威望)
0 投票
1 回复 34 阅读
用户头像 提问 2012年 12月1日 @ Gangplank 上等兵 (314 威望)
0 投票
1 回复 36 阅读
0 投票
1 回复 48 阅读
用户头像 提问 2012年 12月1日 @ Cho'Gath 上等兵 (267 威望)
0 投票
1 回复 26 阅读
用户头像 提问 2014年 2月20日 @ Emiya Shirou 上等兵 (438 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...