I need to use sed to replace a given line in a text file with the
current working directory. But this is getting quite tricky. Problem
ilustrated below:
--
To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 1300470364.2932.5.camel@squeeje.critical.pt">http://lists.debian.org/1300470364.2932.5.camel@squeeje.critical.pt
03-18-2011, 04:47 PM
Joao Ferreira gmail
need help with sed problem
Hello all
I need to use sed to replace a given line in a text file with the
current working directory. But this is getting quite tricky. Problem
ilustrated below:
--
ubuntu-users mailing list
ubuntu-users@lists.ubuntu.com
Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-users
03-18-2011, 04:59 PM
Andrej Kacian
need help with sed problem
On Fri, 18 Mar 2011 17:46:04 +0000
Joao Ferreira gmail <joao.miguel.c.ferreira@gmail.com> wrote:
>jmf@squeeje:~$ sed s/bbbb.*/bbbb:$PWD/ text.txt
>sed: -e expression #1, char 16: unknown option to `s'
Hello,
this is because $PWD gets expanded by shell before sed gets called, so what
actually gets executed is:
sed s/bbb.*/bbbb:/home/myself/ text.txt
...which is obviously syntactically incorrect.
To get result you want, try using different separator character than /, for
example the comma, or underscore:
$ sed s,bbb.*,bbbb:$PWD, text.txt
$ sed s_bbb.*_bbbb:$PWD_ text.txt
--
Andrej Kacian
--
To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 20110318185908.2f959df8@penny">http://lists.debian.org/20110318185908.2f959df8@penny
03-18-2011, 05:15 PM
"Boyd Stephen Smith Jr."
need help with sed problem
On 2011-03-18 12:59:08 Andrej Kacian wrote:
>To get result you want, try using different separator character than /, for
>example the comma, or underscore:
Colon is also a pretty good choice. While it is allowed in pathnames, it
already causes problems. Try adding a directory containing colon to your PATH
or MANPATH. :P
--
Boyd Stephen Smith Jr. ,= ,-_-. =.
bss@iguanasuicide.net ((_/)o o(\_))
ICQ: 514984 YM/AIM: DaTwinkDaddy `-'(. .)`-'
http://iguanasuicide.net/ \_/
03-18-2011, 05:22 PM
Tony Pursell
need help with sed problem
On Fri, 2011-03-18 at 17:47 +0000, Joao Ferreira gmail wrote:
> Hello all
>
> I need to use sed to replace a given line in a text file with the
> current working directory. But this is getting quite tricky. Problem
> ilustrated below:
>
> ====================================
> $ cat text.txt
> aaaa
> bbbb:/some/wrong/path/
> cccc
>
> $ sed s/bbbb.*/bbbb:$TERM/ text.txt
> aaaa
> bbbb:xterm
> cccc
>
> $ sed s/bbbb.*/bbbb:$PWD/ text.txt
> sed: -e expression #1, char 16: unknown option to `s'
> =====================================
>
> I'd like to have
>
> ====================================
> aaaa
> bbbb:/home/myself
> cccc
> ====================================
>
> Can anyone help ? thanks in advance.
>
> Joao
>
>
>
This is what you want
sed /^bbbb.*/s?.*?bbbb:$PWD? txt.txt > newtxt.txt
Note:
/bbbb.*/ addresses the line you want to change.
The error you got is due to $PWD being expanded to /home/myself *before*
the command is executed. The way round it is to use the little known
facility to use any character instead of / in the substitute command (I
have used ?).
Tony
--
ubuntu-users mailing list
ubuntu-users@lists.ubuntu.com
Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-users
03-18-2011, 06:08 PM
Joao Ferreira gmail
need help with sed problem
On Fri, 2011-03-18 at 18:59 +0100, Andrej Kacian wrote:
> On Fri, 18 Mar 2011 17:46:04 +0000
> Joao Ferreira gmail <joao.miguel.c.ferreira@gmail.com> wrote:
>
> >jmf@squeeje:~$ sed s/bbbb.*/bbbb:$PWD/ text.txt
> >sed: -e expression #1, char 16: unknown option to `s'
>
> Hello,
>
> this is because $PWD gets expanded by shell before sed gets called, so what
> actually gets executed is:
>
> sed s/bbb.*/bbbb:/home/myself/ text.txt
>
> ...which is obviously syntactically incorrect.
>
> To get result you want, try using different separator character than /, for
> example the comma, or underscore:
>
> $ sed s,bbb.*,bbbb:$PWD, text.txt
> $ sed s_bbb.*_bbbb:$PWD_ text.txt
Thanks a lot... I did not know that was possible...
I used the # separator. Worked just fine
Thank you
Joao
>
> --
> Andrej Kacian
>
>
--
To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 1300475305.2285.0.camel@squeeje.critical.pt">http://lists.debian.org/1300475305.2285.0.camel@squeeje.critical.pt
03-18-2011, 10:01 PM
Tony Pursell
need help with sed problem
On Fri, 2011-03-18 at 18:22 +0000, Tony Pursell wrote:
> On Fri, 2011-03-18 at 17:47 +0000, Joao Ferreira gmail wrote:
> > Hello all
> >
> > I need to use sed to replace a given line in a text file with the
> > current working directory. But this is getting quite tricky. Problem
> > ilustrated below:
> >
> > ====================================
> > $ cat text.txt
> > aaaa
> > bbbb:/some/wrong/path/
> > cccc
> >
> > $ sed s/bbbb.*/bbbb:$TERM/ text.txt
> > aaaa
> > bbbb:xterm
> > cccc
> >
> > $ sed s/bbbb.*/bbbb:$PWD/ text.txt
> > sed: -e expression #1, char 16: unknown option to `s'
> > =====================================
> >
> > I'd like to have
> >
> > ====================================
> > aaaa
> > bbbb:/home/myself
> > cccc
> > ====================================
> >
> > Can anyone help ? thanks in advance.
> >
> > Joao
> >
> >
> >
>
> This is what you want
>
> sed /^bbbb.*/s?.*?bbbb:$PWD? txt.txt > newtxt.txt
>
> Note:
> /bbbb.*/ addresses the line you want to change.
>
> The error you got is due to $PWD being expanded to /home/myself *before*
> the command is executed. The way round it is to use the little known
> facility to use any character instead of / in the substitute command (I
> have used ?).
>
> Tony
>
Just another point. $PWD will usually give you the home directory as it
is set when you log in and the current working directory will be your
home directory, but you really should use $HOME, which will always be
your home directory.
Tony
--
ubuntu-users mailing list
ubuntu-users@lists.ubuntu.com
Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/ubuntu-users
03-18-2011, 10:05 PM
"Dr. Ed Morbius"
need help with sed problem
on 19:08 Fri 18 Mar, Joao Ferreira gmail (joao.miguel.c.ferreira@gmail.com) wrote:
> On Fri, 2011-03-18 at 18:59 +0100, Andrej Kacian wrote:
> > On Fri, 18 Mar 2011 17:46:04 +0000
> > Joao Ferreira gmail <joao.miguel.c.ferreira@gmail.com> wrote:
> >
> > >jmf@squeeje:~$ sed s/bbbb.*/bbbb:$PWD/ text.txt
> > >sed: -e expression #1, char 16: unknown option to `s'
> >
> > Hello,
> >
> > this is because $PWD gets expanded by shell before sed gets called, so what
> > actually gets executed is:
> >
> > sed s/bbb.*/bbbb:/home/myself/ text.txt
> >
> > ...which is obviously syntactically incorrect.
> >
> > To get result you want, try using different separator character than /, for
> > example the comma, or underscore:
> >
> > $ sed s,bbb.*,bbbb:$PWD, text.txt
> > $ sed s_bbb.*_bbbb:$PWD_ text.txt
>
> Thanks a lot... I did not know that was possible...
>
> I used the # separator. Worked just fine
Please note that '#' is a valid filesystem name character.
There are relatively few values which are safely excludable. In your
case this shouldn't be a problem, but in the general case (I'm working
on a script that needs to do path parsing) it's a bit of a pain.
--
Dr. Ed Morbius, Chief Scientist / |
Robot Wrangler / Staff Psychologist | When you seek unlimited power
Krell Power Systems Unlimited | Go to Krell!
--
To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 20110318230526.GK3482@altaira.krellpowersys.exo">h ttp://lists.debian.org/20110318230526.GK3482@altaira.krellpowersys.exo
03-18-2011, 10:36 PM
shawn wilson
need help with sed problem
On Fri, Mar 18, 2011 at 7:05 PM, Dr. Ed Morbius <dredmorbius@gmail.com> wrote:
on 19:08 Fri 18 Mar, Joao Ferreira gmail (joao.miguel.c.ferreira@gmail.com) wrote:
> On Fri, 2011-03-18 at 18:59 +0100, Andrej Kacian wrote:
Please note that '#' is a valid filesystem name character.
There are relatively few values which are safely excludable. *In your
case this shouldn't be a problem, but in the general case (I'm working
on a script that needs to do path parsing) it's a bit of a pain.
i agree with that - the underscore that was used is also valid. you might look at proper quoting of variables to avoid this. something like cat text.txt | sed -e 's/bbb.*/bbbb:"$PWD"/' > new.txt
03-19-2011, 01:46 PM
Clive Standbridge
need help with sed problem
> i agree with that - the underscore that was used is also valid. you
> might look at proper quoting of variables to avoid this. something
> like cat text.txt | sed -e 's/bbb.*/bbbb:"$PWD"/' > new.txt
The output from that, given Joao's original text.txt, is
aaaa
bbbb:"$PWD"
cccc
The reason is that " and $ have no special effect inside '.
I would prefer to use some other character for the s command delimiter
as earlier posters in this thread suggested, because it is easier to
read. But another way you can do it is to escape all the backslashes
in $PWD using a shell expansion:
$ sed "s/bbbb.*/bbbb:${PWD/////}/" text.txt
aaaa
bbbb:/home/clive/temp
cccc
You can see its effect on the string passed to sed using set -x:
$ (set -x; sed s/bbbb.*/bbbb:${PWD/////}/ text.txt)
+ sed 's/bbbb.*/bbbb:/home/clive/temp/' text.txt
A brief explanation of ${PWD/////} :-
${PWD//A/B} replaces all occurrences of pattern A with string B.
For A use / - the prevents / being treated as a delimiter.
For B use / - the first causes the second to be taken literally.
I hope this helps.
--
Cheers,
Clive
--
To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Archive: 20110319144616.GA3288@rimmer.esmertec.com">http://lists.debian.org/20110319144616.GA3288@rimmer.esmertec.com