Join multiple sed commands in one script for processing CSV file
First of all, as Michael showed, you can just combine all of these into a single command:
sed '/^FOOTER/d; s/^\"//; s/\"$//; s/\"|\"/|/g' csv > csv1
I think some sed
implementations can't cope with that and might need:
sed -e '/^FOOTER/d' -e 's/^\"//' -e 's/\"$//' -e 's/\"|\"/|/g' csv > csv1
That said, it looks like your fields are defined by |
and you just want to remove "
around the entire field, leaving those that are within the field. In that case, you could do:
$ sed '/FOOTER/d; s/\(^\||\)"/\1/g; s/"\($\||\)/\1/g' csv
HEADER
first, column|second "some random quotes" column|third ol' column
Or, with GNU sed
:
sed -r '/FOOTER/d; s/(^|\|)"/\1/g; s/"($|\|)/\1/g' csv
You could also use Perl:
$ perl -F"|" -lane 'next if /FOOTER/; s/^"|"$// for @F; print @F' csv
HEADER
first, column|second some random quotes column|third ol' column
This would also work:
sed 's/^"//; s/"|"/|/g; s/""$/"/'
Example:
$ echo '"this"|" and "ths""|" and "|" this 2"|" also "this", "thi", "and th""' |
sed 's/^"//; s/"|"/|/g; s/""$/"/'
this| and "ths"| and | this 2| also "this", "thi", "and th"
pretty version
sed '
s/^"//
s/"|"/|/g
s/""$/"/
$d
'