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