Strange sed behaviour


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
Strange sed behaviour

Code:
[/tmp]$ echo a.bc | sed -e "s/\|/\\|/g"
|a|.|b|c|
[/tmp]$

Is the behavior of the sed statement expected ? Or is this a bug in sed ?

OS details

Code:
Linux 2.6.9-55.0.0.0.2.ELsmp #1 SMP Wed May 2 14:59:56 PDT 2007 i686 i686 i386 GNU/Linux

# 2  
The problem is perhaps in the quotation you use: The shell is probably "eating" your escape chars away and sed doesn't see what you expect it to see.

I made it a habit to use always single quotes for sed-statements to avoid this. It is even possible to use single quotes when using a variable inside an sed-statement:

sed 's/'"$src"'/'"$tgt"'/g'

will change ocurrences of $src to the value of $tgt

I hope this helps.

bakunin
# 3  
Fine. The single quotes vs double quotes has an impact.

Code:
[/tmp]$ echo a.bc | sed -e "s/\|/\\|/g"
|a|.|b|c|
[/tmp]$ echo a.bc | sed -e 's/\|/\\|/g'
\|a\|.\|b\|c\|
[/tmp]$

But that does not explain those extra characters in the output. In either case I would expect the output to be a.bc and not anything which has | or \| wrapped around every character.

Am I missing something something here ?
# 4  
Quote:
Originally Posted by vino
Am I missing something something here ?
To be honest, now i'm astonished myself:

lacking a UNIX machine (got a day off) i fired up cygwin and tried:

Code:
# echo a.bc | sed --posix 's/\|/x/g'
xax.xbxcx

# echo 'a.bc' | sed --posix 's/\|/x/g'
xax.xbxcx

# echo 'a.bc' | sed --posix 's/|/x/g'
a.bc

# sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, to the extent permitted by law.

It seems that "\|" is matching the NULL-regexp, whereas "|" is matching a single pipe character as expected. I have no idea, why this is the case, but will investigate further.

bakunin
# 5  
my guess:
\| is used in sed (gnu) as alternation. therefore
Code:
# echo "a.bc" | sed -e 's/\|/\\|/g'
\|a\|.\|b\|c\|

seem to say "blank" or "blank" (or null?) substitute with \|, hence the result.
if really want to search for a "|", use the open square brackets
Code:
# echo "a.bc" | sed -e 's/[|]/\\|/g'
a.bc
# echo "a|bc" | sed -e 's/[|]/\\|/g'
a\|bc

# 6  
Quote:
Originally Posted by ghostdog74
my guess:
\| is used in sed (gnu) as alternation. therefore
Code:
# echo "a.bc" | sed -e 's/\|/\\|/g'
\|a\|.\|b\|c\|

seem to say "blank" or "blank" (or null?) substitute with \|, hence the result.
if really want to search for a "|", use the open square brackets
Code:
# echo "a.bc" | sed -e 's/[|]/\\|/g'
a.bc
# echo "a|bc" | sed -e 's/[|]/\\|/g'
a\|bc

Wouldn't the alternation operator require atleast two operands ?
# 7  
Humm, seems to be a GNU sed-ism

Under Interix 6.0 and ksh-93 and the OOB sed (non-GNU), it works as expected

Code:
$ echo a.bc | sed -e "s/\|/\\|/g"
a.bc
$

Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #691
Difficulty: Medium
UnixWare is a Unix operating system originally released by Univel.
True or False?

8 More Discussions You Might Find Interesting

1. Red Hat

Crontab strange behaviour

Hi all, I'm having this scenario which for the moment I cannot resolve. :( I wrote a script to make a dump/export of the oracle database. and then put this entry on crontab to be executed daily for example. The script is like below: cat /home/oracle/scripts/db_backup.sh #!/bin/ksh ... (3 Replies)
Discussion started by: enux
3 Replies

2. Shell Programming and Scripting

Strange RegExp Behaviour

Hello, I was trying to identify lines who has a word of the following pattern "xyyx" (where x, and ys are different characters). I was trying the following grep - egrep '(\S)()\2\1' This pattern do catches the wanted pattern, but it also catches "GGGG" or "CCCC" patterns. I was trying to... (5 Replies)
Discussion started by: itskov
5 Replies

3. HP-UX

Strange login behaviour

Hi all, I am using HP-UX and I have just noticed that when I log into the network it seems to save the previous windows that were subsequently closed on previous occasions. Does anyone know when I log in, it seems to display these previous windows, e.g. nedit windows open again? Does... (1 Reply)
Discussion started by: cyberfrog
1 Replies

4. Shell Programming and Scripting

Strange behaviour with perl i/o?

Hi All, I got a strange problem here. I have a perl script which is fetching data from a database table and writing a file with that data. If i run that script from linux command line, the file it creates is a normal ascii text file without any binary character in it.But... (9 Replies)
Discussion started by: DILEEP410
9 Replies

5. Shell Programming and Scripting

strange behaviour from sed???

Hi all, I want to do a very simple thing with sed. I want to print out the line number of a disk I have defined in /etc/exports, so I do: It's all good, but here's the problem. When I define md0 in a variable, I get nothing from sed: Why is that? can anybody please help? Thanks (2 Replies)
Discussion started by: alirezan
2 Replies

6. UNIX for Dummies Questions & Answers

Strange Program behaviour

Had a strange thing going on with my code. It's ok I figured it out for myself.... (2 Replies)
Discussion started by: mrpugster
2 Replies

7. Shell Programming and Scripting

A Strange Behaviour!!!

Can some-one give me a view to this : I have a directory in an unix server, having permissions r-xr-xr-x .This directory is basically a source directory. Now there is another directory basically the destination directory which has all the permissions. Note:I log in as not the owner,but user... (5 Replies)
Discussion started by: navojit dutta
5 Replies

8. Linux

/etc/passwd strange behaviour!

Hi there, first of all, here is my conf of a uname -a Linux SAMBA 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686 unknown on a fedora machine. Here is my problem: every once in a while, the line containing root disappears in the /etc/passwd, disabling all logging on my server. Any one have... (0 Replies)
Discussion started by: penguin-friend
0 Replies

Featured Tech Videos