trying to script a command line

Mike Bydalek mbydalek at compunetconsulting.com
Wed Mar 5 14:37:16 MST 2008


Craig White wrote:
> OK - truly simplifying my issue to a point where someone should be able
> to explain this to me...
>
> # my starting file
> $ cat test-db.txt
> A 1
> B 2
> C 3
>
> # this is what I want
> $ cat test-db.txt | cat test-db.txt | sed 's/ /\\ /g' | sed ':a;N;$!
> ba;s/\n/ /g'
> A\ 1 B\ 2 C\ 3
>
> # but if I aggregate the command inside backticks, I lose the 
> # escaped spaces part of the sed command...
>
> $ TEST=`cat test-db.txt \
>   | cat test-db.txt \
>   | sed 's/ /\\ /g' \
>   | sed ':a;N;$!ba;s/\n/ /g'`
>
> $ echo $TEST
> A 1 B 2 C 3
>
> So the carriage returns are removed by the spaces aren't escaped.
>
> How can I do this so I can aggregate a file with fields on each line so
> that the carriage returns are removed and the spaces are escaped?
>
>   
$ TEST=`cat test-db.txt | sed 's/ /\\\ /g' | tr '\n' '\\ '`
$ echo $TEST
A\ 1 B\ 2 C\ 3

One thing I don't get is, why use cat twice?  Also, imo tr is better 
than sed at replacing '\n' since what you have is gnu specific.

-Mike


More information about the PLUG-discuss mailing list