H开发者_C百科ow do I replace foo.
with foo_
with sed simply running
sed 's/foo./foo_/g' file.php
doesn't work.
Escape the .
:
sed 's/foo\./foo_/g' file.php
Example:
~$ cat test.txt
foo.bar
~$ sed 's/foo\./foo_/g' test.txt
foo_bar
Interestingly, if you want to search for and replace just the dot, you have to put the dot in a character set. Escaping just the dot alone in a sed command for some reason doesn't work. The dot is still expanded to a single character wild card.
bash --version # Ubuntu Lucid (10.04)
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
Replaces all characters with dash:
echo aa.bb.cc | sed s/\./-/g
# --------
Replaces the dots with a dash:
echo aa.bb.cc | sed s/[.]/-/g
# aa-bb-cc
With the addition of leading characters in the search, the escape works.
echo foo. | sed s/foo\./foo_/g # works
# foo_
Putting the dot in a character set of course also works.
echo foo. | sed s/foo[.]/foo_/g # also works
# foo_
Escape the dot with a \
sed 's/foo\./foo_/g' file.php
If you find the combination of / and \ confusing you can use another 'separator' character
sed 's#foo\.#foo_#g
The 2nd character after the s can be anything and sed will use that character as a separator.
You need to escape the dot - an unescaped dot will match any character after foo.
sed 's/foo\./foo_/g'
For myself, sed 's/foo\./foo_/g'
is working. But you can also try:
sed -e 's/foo\./foo_/g'
and
sed -e "s/foo\\./foo_/g"
and
sed 's/foo[.]/foo_/g'
精彩评论