bash - Struggling to combine two Greps statements -


greetings!

i have been tasked create report off files receive our hardware suppliers. need grep these files 2 fields 'test_version' , 'model-manufacturer' ; each field, need capture corresponding values.

when running each statement separately, results want:

1) 'test_version', straightforward:

find . -name "*.ver" -exec grep 'test_version=' '{}' ';' -print;   ./(file_name).ver test_version=2.6.3 ./(file_name).ver test_version=2.4.7 

2) 'model-manufacturer', , bit tricky since need across multiple lines. solved issue using perl regex option -p.

find . -name "*.ver" -exec grep -p 'model-manufacturer:.\n.' '{}' ';' -print  ./(file_name).ver --> model-manufacturer: d12-100 ./(file_name).ver --> model-manufacturer: h21-100 

ideally, create simple report looks this

(file_name) test_version=2.6.3 model-manufacturer:    d12-100 (file_name) test_version=2.4.7 model-manufacturer:    h21-100 

my attempt combine both greps not working i.e nothing found:

find . -name "*.ver" -exec grep -p 'test_version=.model-manufacturer:.\n.' '{}' ';' -print 

how can grep search both fields , produce output want?

i created test file:

$ cat test1.ver test_version=2.6.3 model-manufacturer: d12-100 test_version=2.4.7 model-manufacturer: h21-100 test_version=2.6.3 model-manufacturer: d12-100 test_version=2.4.7 model-manufacturer: h21-100 

i created copy, replicate searching through multiple files:

$ cp test1.ver test2.ver 

finally, able generate report you're looking using following string of commands:

$ find . -name "*.ver" -print -exec egrep -a 1 'test_version=|model-manufacturer:' {} ';' | sed -e '/model/n; s/\n/ /' ./test1.ver test_version=2.6.3 model-manufacturer: d12-100 test_version=2.4.7 model-manufacturer: h21-100 test_version=2.6.3 model-manufacturer: d12-100 test_version=2.4.7 model-manufacturer: h21-100 ./test2.ver test_version=2.6.3 model-manufacturer: d12-100 test_version=2.4.7 model-manufacturer: h21-100 test_version=2.6.3 model-manufacturer: d12-100 test_version=2.4.7 model-manufacturer: h21-100 

egrep allows extended regular expressions, in i'm using | alternation operator.

the -a flag (e)grep, makes provide line of context after each match. if input files have unwanted content after test_version lines, may need include grep -v command piped in between find , sed strip out unwanted output.


Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -