我有一个这样的列表来捕捉joomla版本
./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行
所以结果应该是:
./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脚本
BEGIN{ RS=""; FS="\n" }
/public/ {
for (i=1; i<=NF; i++) {
if ( ! (($i ~ /./) && ($(i+1) !~ /public/) && ($(i+2) !~ /public/) ) ) {
print $i
}
}
print ""
}但这会导致:
./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的第二条公共线路
https://stackoverflow.com/questions/41154136
复制相似问题