sed vs gnu sed

Vincent Hoffman vince at unsane.co.uk
Wed Nov 9 10:30:32 UTC 2011


'Hi all,
        I'm trying to move a script from a linux box to a freebsd box.
All going well as its just a bash script and bash is bash, however there
is one line I'm unable to use directly, as bsd sed (correctly according
to SUS at least, I believe[1]) appends a newline when writing to
standard out, gnu sed doesnt. example
BSD
[backup at banshee ~]$ echo -n "/boot:7:1:5; /:7:1:5; /var:7:1:5"  | sed -n
's/[[:space:]]*;[[:space:]]*/;/gp'
/boot:7:1:5;/:7:1:5;/var:7:1:5
[backup at banshee ~]$

LINUX

[backup at amber ~]$ echo -n "/boot:7:1:5; /:7:1:5; /var:7:1:5"  | sed
's/[[:space:]]*;[[:space:]]*/;/g'
/boot:7:1:5;/:7:1:5;/var:7:1:5[backup at amber ~]$

is there any easy way to make our sed do the same as gnu sed here? 
for now I have encapsulated the whole thing in a subshell
[backup at banshee ~]$ echo -n $(echo -n "/boot:7:1:5; /:7:1:5;
/var:7:1:5"  | sed -n 's/[[:space:]]*;[[:space:]]*/;/gp')
/boot:7:1:5;/:7:1:5;/var:7:1:5[backup at banshee ~]$

Which works but seems a little hackish.

Vince

[1]http://pubs.opengroup.org/onlinepubs/007908799/xcu/sed.html
' Whenever the pattern space is written to standard output or a named
file, /sed/ will immediately follow it with a newline character. "



More information about the freebsd-questions mailing list