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