开发者社区> 问答> 正文

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

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

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

sed -n '/^1.*/p' .vimrc
但是,如何连同该行前面紧邻的所有注释行也过滤出来,请高手帮忙解答,谢谢!


  1. "

展开
收起
a123456678 2016-06-16 14:57:10 2896 0
1 条回答
写回答
取消 提交回答
  • sed 是流编辑器,要解决这个问题要一些技巧,sed -n '/^"/{H;d};/^"/!{//{H;x;p;s/.//;x;d};//!{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
    2019-07-17 19:40:55
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载