Sed command only works when split up into two steps -
can explain me why combining step 1 , step 2 1 sed command doesn't work:
sed -e :a -e 's/^.\{0,127\}$/& /;ta' \ -e '1,46d' -e '/pharmacom/,+5d' -e 's/^m//g' \ -e ':a;n;$!ba;s/\n//g' -e 's/---*/\n/g' file > result but same command split 2 steps works:
step 1:
sed -e :a -e 's/^.\{0,127\}$/& /;ta' -e '1,46d' \ -e '/pharmacom/,+5d' -e 's/^m//g' file > step step 2:
sed -e ':a;n;$!ba;s/\n//g' -e 's/---*/\n/g' step > result
i first translated commands readable make sense of it:
# pad lines spaces until 128 characters long :a s/^.\{0,127\}$/& / ta # delete first 46 lines 1,46d # delete line containing 'pharmacom' , next 5 lines /pharmacom/,+5d # remove carriage returns s/^m//g # join rest of lines on single line :a n $!ba s/\n//g # replace 2 or more dashes newline s/---*/\n/g then reduced problematic parts:
# pad lines spaces until 128 characters long :a s/^.\{0,127\}$/& / ta # join rest of lines on single line :a n $!ba s/\n//g or, on single line:
sed ':a;s/^.\{0,127\}$/& /;ta;:a;n;$!ba;s/\n//g' the problem use same label name twice, instead of repeating first s command, ta command jumps second label :a, , instead of padding 128 characters, single space inserted.
this fixed using 2 different label names:
sed ':a;s/^.\{0,127\}$/& /;ta;:b;n;$!bb;s/\n//g' two remarks:
- it doesn't matter if use
sed -e '...' -e '...'orsed '...;...'in context; both count single command , label names have unique. - i'd move
dcommands beginning of script, or padding work nothing on lines you're deleting anyways.