linux - Shell里如何过滤出文件中匹配某个规则的行以及它上面的注释行
迷茫
迷茫 2017-04-17 11:08:05
[Linux讨论组]

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

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

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

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
伊谢尔伦

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 比较合适。

ringa_lee

你是说这样吗?

$>grep -B 1 ^\" ~/.vimrc
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号