【发布时间】:2011-09-01 16:59:34
【问题描述】:
如何替换 foo.用 foo_ 用 sed 简单地运行
sed 's/foo./foo_/g' file.php
不起作用。 谢谢!
【问题讨论】:
-
您能否向我们展示一些
file.php行,其中替换无法正常工作?
标签: linux command-line sed
如何替换 foo.用 foo_ 用 sed 简单地运行
sed 's/foo./foo_/g' file.php
不起作用。 谢谢!
【问题讨论】:
file.php 行,其中替换无法正常工作?
标签: linux command-line sed
有趣的是,如果您只想搜索和替换点,则必须将点放入字符集中。由于某种原因,在 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_
-- 保罗
【讨论】:
echo foo8 | sed s/foo\./foo_/g,你仍然会得到foo_。为防止被 shell 转义,请使用引号:echo aa.bb.cc | sed 's/\./-/g' 将给出 aa-bb-cc;
就我自己而言,sed 's/foo\./foo_/g' 正在工作。不过你也可以试试:
sed -e 's/foo\./foo_/g'
和
sed -e "s/foo\\./foo_/g"
和
sed 's/foo[.]/foo_/g'
【讨论】:
用 \ 转义点
sed 's/foo\./foo_/g' file.php
如果您发现 / 和 \ 的组合令人困惑,您可以使用另一个“分隔符”字符
sed 's#foo\.#foo_#g
s 之后的第二个字符可以是任何字符,sed 将使用该字符作为分隔符。
【讨论】:
sed 不熟悉,但在第二个示例中,最后一个/ 真的有必要吗,其中# 用作分隔符?
您需要转义点 - 未转义的点将匹配 foo 之后的任何字符。
sed 's/foo\./foo_/g'
【讨论】: