输入是git中的多个yaml文件:
e.g。配置/ CONF /主机/ ghf04.lmn /发动机1.yaml
ports:
ajp: 8010
http: 8011
shutdown: 8012
apps:
- null
- Michael
- Hardy
我有这样的东西来提取应用程序下的数据:
for j in a b
do
for i in 01 02 03 04 05 06 07 08 09 10
do
echo $j$i
ssh $j$i 'grep -P ".+(- .+)" abc/engine*yaml | perl -pe "s|\abc\/(ghf\d{2})\.lmn\/(engine-\d{1,2}).yaml:.+- (.+)|\1;\2;\3|g" |sort'
done # end CM
完成
以下列形式给出了输出:
a04
ghf04;engine-1;null
ghf04;engine-1;Michael
ghf04;engine-1;Hardy
我想从grep循环中删除包含null的行。那么我在哪里将grep -v放在perl命令中呢?尝试了下面的一些事情,但没有工作:
ssh $j$i 'grep -P ".+(- .+)" abc/engine*yaml | perl -pe "s|\abc\/(ghf\d{2})\.lmn\/(engine-\d{1,2}).yaml:.+- (.+)|\1;\2;\3|g" |grep -v ghf.+null |sort'
答案 0 :(得分:1)
有点hacky
find . -name *.yaml | xargs perl -e 'undef $/;for(@ARGV){open(FILE,$_),;$content=<FILE>;close(FILE);s/\.\w\w\w//g;s/^\.\///g;s/\//;/g;$content=~s/\s+-\s+null//g;$content=~s/ports.*apps:\n//sg;$content=~s/\s+-\s+(\w+)/\1 /g;@fields=split(/\s+/,$content);for $field(@fields){print "$_;$field\n";}}'