Issue
I need to grep over all files in a directory for the function AbcXyz( and dump the outputs to a single file. But there are 2 caveats :
I need to redirect grep outputs to separate lines, i.e. each instance of AbcXyz(...) identified has to appear in a separate line.
The function takes many parameters and might not be present in one line
In Code :
AbcXyz(param1, param2, "Some message ....
.... Some more message", param3)
Grepped Output :
AbcXyz(param1, param2, "Some message ........ Some more message", param3)
How can I do this ?
Solution
It can't be done robustly without writing a parser for whatever language your input file contains but with GNU awk for multi-char RS and assuming your input always looks as you show, etc.:
awk -v RS='AbcXyz[(][^)]*)' 'RT{$0=RT; $1=$1; print}' file
e.g.:
$ cat file
AbcXyz(param1, param2, "Some message ....
.... Some more message", param3)
AbcXyz(param1, param2,
"Some message ....
.... Some more message",
param3)
AbcXyz(param1, param2, "Some message .... .... Some more message", param3)
$ awk -v RS='AbcXyz[(][^)]*)' 'RT{$0=RT; $1=$1; print}' file
AbcXyz(param1, param2, "Some message .... .... Some more message", param3)
AbcXyz(param1, param2, "Some message .... .... Some more message", param3)
AbcXyz(param1, param2, "Some message .... .... Some more message", param3)
Answered By - Ed Morton