I am trying to use pipe command in UNIx to substitute some words (sed) and then use the head command to show me the first 9 lines of the file. However, the head command erase the sed command and just do it by itself. Here is what I am trying to do:
$ sed 's/[n]d/nd STREET/g' street | sed 's/[r]d/rd STREET/g' street | head -n 9 street
01 m motzart amadeous 25 2nd 94233
02 m guthrie woody 23 2nd 94223
03 f simone nina 27 2nd 94112
04 m lennon john 29 2nd 94221
05 f harris emmylou 20 2nd 94222
06 m marley bob 22 2nd 94112
07 f marley rita 26 2nd 94212
08 f warwick dione 26 2nd 94222
09 m prine john 35 3rd 94321
CodePudding user response:
sed and head only read from stdin when they aren't given a filename to read from instead. Therefore, when you give head the name street, it ignores its standard input (which is where the output from sed is).
Provide the filename only once, at the front of the pipeline.
$ <street sed -e 's/[n]d/nd STREET/g' -e 's/[r]d/rd STREET/g' | head -n 9
By the way, you could also write this to use only one sed operation to handle both nd and rd:
$ <streed sed -e 's/\([rn]d\)/&1 STREET/g' | head -n 9
