首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果下一行匹配,则使用awk打印行+下两行

如果下一行匹配,则使用awk打印行+下两行
EN

Stack Overflow用户
提问于 2016-12-15 07:43:22
回答 0查看 878关注 0票数 3

我有一个这样的列表来捕捉joomla版本

代码语言:javascript
复制
./somedir/bla/old/libraries/cms/version/version.php
        public $RELEASE = '2.5';
        public $DEV_LEVEL = '24';
./somedir/bla3/www/libraries/cms/version/version.php
        public $RELEASE = '2.5';
        public $DEV_LEVEL = '9';
./somedir/bla4/www/libraries/cms/version/version.php
./somedir/bla5/www/w/scripts/version.php
./somedir/bla6/www/libraries/cms/version/version.php
./somedir/bla7/www/libraries/cms/version/version.php
        public $RELEASE = '2.5';
        public $DEV_LEVEL = '9';

我想要的是,如果public在下一行,那么只显示这一行+下两行。必须忽略Else行

所以结果应该是:

代码语言:javascript
复制
./somedir/bla/old/libraries/cms/version/version.php
        public $RELEASE = '2.5';
        public $DEV_LEVEL = '24';
./somedir/bla3/www/libraries/cms/version/version.php
        public $RELEASE = '2.5';
        public $DEV_LEVEL = '9';
./somedir/bla7/www/libraries/cms/version/version.php
        public $RELEASE = '2.5';
        public $DEV_LEVEL = '9';

我已经尝试使用Awk和这个awk脚本

代码语言:javascript
复制
BEGIN{ RS=""; FS="\n" }
 /public/ {
    for (i=1; i<=NF; i++) {
        if ( ! (($i ~ /./) && ($(i+1) !~ /public/) && ($(i+2) !~ /public/) ) ) {
            print $i
        }
    }
    print ""
}

但这会导致:

代码语言:javascript
复制
./somedir/bla/old/libraries/cms/version/version.php
        public $RELEASE = '2.5';
./somedir/bla3/www/libraries/cms/version/version.php
        public $RELEASE = '2.5';
./somedir/bla7/www/libraries/cms/version/version.php
        public $RELEASE = '2.5';

我错过了dev_level的第二条公共线路

EN

回答

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

https://stackoverflow.com/questions/41154136

复制
相关文章

相似问题

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