2016-01-21 2 views
-1

Ввод - это несколько файлов ямлов внутри git:grep -v с perl один вкладыш

например. конфиг/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 

Я хочу удалить строки, содержащие null из цикла grep. Итак, где я могу поместить 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' 
+4

Perl больше, чем способен обрабатывать все это само по себе. Ваш вопрос будет намного яснее, если вы просто указали какой-то ввод, нужный результат и ваш 'grep | perl | sort' без петель или части 'ssh'. –

+0

Ввод файла git yaml: приложений: - null - Michael - Hardy –

+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";}}' 
Смежные вопросы