Date: Sun, 1 Feb 2004 10:10:27 -0800 From: Chris Pressey <cpressey@catseye.mine.nu> To: Daniela <dgw@liwest.at> Cc: questions@freebsd.org Subject: Re: OT: sed problem Message-ID: <20040201101027.2b90499d.cpressey@catseye.mine.nu> In-Reply-To: <200402011533.58877.dgw@liwest.at> References: <200402010138.44102.dgw@liwest.at> <20040201013401.GA35376@users.munk.nu> <200402011533.58877.dgw@liwest.at>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 1 Feb 2004 15:33:58 +0000 Daniela <dgw@liwest.at> 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. 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.) -Chris
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040201101027.2b90499d.cpressey>