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
Post a Comment