The sed
command uncommon behaviors
The sed
command is used in Unix, some strange behaviors can let time waste.
Escape char in regex
Normally, the \
is escape character, but it wasn't in some cases.
For example, .
is to match any character, it needs to have \
as escape character if need it to be a dot character.
$ echo "test (111) help . 1" | sed -e "s/.//"
est (111) help . 1
$ echo "test (111) help . 1" | sed -e "s/\.//"
test (111) help 1
But this is not for ()
, without \
, they are ()
, with \
, they are indicating subpattern.
$ echo "test (111) help . 1" | sed -e 's/(111)//'
test help . 1
$ echo "test (111) help . 1" | sed -e 's/\(111\)//'
test () help . 1
$
Same for {}
echo "test (111) help . 1" | sed -e 's/hel{1}p//'
test (111) help . 1
$ echo "test (111) help . 1" | sed -e 's/hel\{1\}p//'
test (111) . 1
and ?
$ echo "test (111) help . 1" | sed -e 's/he?lp//'
test (111) help . 1
$ echo "test (111) help . 1" | sed -e 's/h?lp//'
test (111) help . 1
$ echo "test (111) help . 1" | sed -e 's/he\?lp//'
test (111) . 1
*
and +
The sed
understands the meaning of *
, but not for +
.
$ echo "test (111) help . 1" | sed -e 's/hel*p//'
test (111) . 1
$ echo "test (111) help . 1" | sed -e 's/hel+p//'
test (111) help . 1
\*
and \+
The sed
understands the meaning of \+
, but not for \*
.
$ echo "test (111) help . 1" | sed -e 's/hel\*p//'
test (111) help . 1
$ echo "test (111) help . 1" | sed -e 's/hel\+p//'
test (111) . 1