I want to extract lines that don't contain #
and delete "
, ;
in the output.
My input FILE looks like this:
# ;string"1"
# string"2";
string"3";
Can use grep
and tr
to get wanted output:
grep -v '#' FILE | tr -d ';"'
string3
However I want to use awk
.
I can extract invert match awk '!/#/' FILE
, but how can I use sub
to delete "
, ;
in the same awk
command?
You can use gsub
for global substitution:
awk '!/#/{gsub(/[";]/,"",$0);print}'
The following transcript shows this in action, it delivers the same results as your grep/tr
pipeline:
pax> echo '# ;string"1"
# string"2";
string"3";' | awk '!/#/{gsub(/[";]/,"",$0);print}{}'
string3
Note that the final {}
may not be necessary in some implementations of awk
but it's there to stop output of non-matching lines in those implementations (usually older ones) that do it automatically for lines matching none of the rules.
Use gsub
instead which would replace all matches not just one:
awk '/#/{next}{gsub(/[";]/,"")}1' file
Output:
string3
gsub
makes it process $0
by default./#/{next}
makes it skip lines containing #
1
makes it print $0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With