当存在点和下划线时,搜索并替换为sed

时间:2011-05-25 11:42:51

标签: linux command-line sed

如何替换foo。用foo_和sed一起运行

sed 's/foo./foo_/g' file.php

不起作用。 谢谢!

5 个答案:

答案 0 :(得分:22)

逃离.

sed 's/foo\./foo_/g' file.php

示例:

~$ cat test.txt 
foo.bar
~$ sed 's/foo\./foo_/g' test.txt 
foo_bar

答案 1 :(得分:11)

有趣的是,如果您只想搜索并替换点,则必须将点放在字符集中。出于某种原因,仅在sed命令中单独转义点不起作用。点仍然扩展为单个字符外卡。

$ bash --version  # Ubuntu Lucid (10.04)

GNU bash,版本4.1.5(1)-release(x86_64-pc-linux-gnu)

$ echo aa.bb.cc | sed s/\./-/g  # replaces all characters with dash

'--------'

$ echo aa.bb.cc | sed s/[.]/-/g  # replaces the dots with a dash

AA-BB-CC

通过在搜索中添加前导字符,逃脱工作。

$ echo foo. | sed s/foo\./foo_/g  # works

FOO _

将点放在字符集中当然也有效。

$ echo foo. | sed s/foo[.]/foo_/g  # also works

FOO _

- 保罗

答案 2 :(得分:6)

使用\

转义点
sed 's/foo\./foo_/g' file.php

如果您发现/和\ confusing的组合,您可以使用另一个“分隔符”字符

sed 's#foo\.#foo_#g

s之后的第二个字符可以是任何东西,sed将使用该字符作为分隔符。

答案 3 :(得分:3)

你需要逃离点 - 未转义的点将匹配foo之后的任何角色。

sed 's/foo\./foo_/g'

答案 4 :(得分:0)

对于我自己,sed 's/foo\./foo_/g'正在发挥作用。但你也可以尝试:

sed -e 's/foo\./foo_/g'

sed -e "s/foo\\./foo_/g"

sed 's/foo[.]/foo_/g'