OT: sed problem
cpressey at catseye.mine.nu
Sun Feb 1 10:06:09 PST 2004
On Sun, 1 Feb 2004 15:33:58 +0000
Daniela <dgw at 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
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.)
More information about the freebsd-questions