How do I let the sed 'w' command know where the file name ends?

advertisements

Every example I was able to find demonstrating the w command of sed has it in the end of the script. What if I can't do that?

An example will probably demonstrate the problem better:

$ echo '123' | sed 'w tempfile; s/[0-9]/\./g'
sed: couldn't open file tempfile; s/[0-9]/\./g: No such file or directory

(How) can I change the above so that sed knows where the filename ends?

P.S. I'm aware that I can do

$ echo '123' | sed 'w tempfile
> s/[0-9]/\./g'
...

Are there prettier options?

P.P.S. People tend to suggest to split it in two scripts. The question is then: is it safe? What if I was going to branch somewhere after the w command, and so on. Can someone confirm that any script can be split in two after any command and that will not affect the results?

Final edit: I checked that multiple -e work just as concatenated commands. I thought it was more complex (like the first one should always exit before the second one starts, etc.). However, I tried splitting a {..} block of commands between two scripts and it still worked, so the w thing is really not a serious problem. Thanks to all.


You can give a two line script to sed in one shell line:

echo '123' | sed -e 'w tempfile' -e 's/[0-9]/\./g'