On Sunday 01 February 2004 18:10, Chris Pressey wrote: > On Sun, 1 Feb 2004 15:33:58 +0000 > > Daniela <[EMAIL PROTECTED]> wrote: > > On Sunday 01 February 2004 01:34, Jez Hancock wrote: > > > On Sun, Feb 01, 2004 at 01:38:44AM +0000, Daniela wrote: > > > > I was wondering how I can do the following with sed (or another > > > > program): 1. Output only the text from the start of the line to > > > > the first pipe character 2. Output only the text between the last > > > > and the previous pipe character Or, split the line at the pipe > > > > characters and assign the parts to different shell variables. > > > > > > #!/bin/sh > > > test="one|two|three" > > > set `echo "$test" | sed -e 's/\|/ /g'` > > > > > > # $1="one", $2="two", $3="three": > > > echo $@ > > > > This doesn't work when the parts between the pipe characters contain > > spaces themselves. > > Nor does the awk approach I posted, incidentally - the problem being > that sh likes to split up its input into variables, by spaces.
awk -F'|' '{ print $1 }' does work indeed. This way, I can assign the parts to different variables, and dismiss the parts I don't need. > You can work around it by translating the spaces into some unused > character first, then translating pipes to spaces, then finally > translating the unused characters back into spaces in each of the > variables. > > There may be a simpler way, but if so, I don't know what it is. > > Or you could avoid sh variables and do whatever processing you have to > do entirely in awk (or perl.) I really like csh programming. Everyone says that csh is crap for scripting, but it isn't. I think Perl is harder than csh. But let's not start another holy war. _______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "[EMAIL PROTECTED]"