Linux 当出现点和下划线时,搜索并替换为sed

Linux 当出现点和下划线时,搜索并替换为sed,linux,command-line,sed,Linux,Command Line,Sed,如何替换foo。使用foo_uuu和sed简单运行 sed 's/foo./foo_/g' file.php 不起作用。 谢谢 退出: sed 's/foo\./foo_/g' file.php 例如: ~$ cat test.txt foo.bar ~$ sed 's/foo\./foo_/g' test.txt foo_bar 您需要转义点-未转义点将匹配foo之后的任何字符 sed 's/foo\./foo_/g' 用一根绳子把圆点逃脱\ sed 's/foo\./foo_/g

如何替换foo。使用foo_uuu和sed简单运行

sed 's/foo./foo_/g' file.php
不起作用。
谢谢

退出

sed 's/foo\./foo_/g' file.php
例如:

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

您需要转义点-未转义点将匹配foo之后的任何字符

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

用一根绳子把圆点逃脱\

sed 's/foo\./foo_/g' file.php
如果发现/和\的组合令人困惑,可以使用另一个“分隔符”字符

sed 's#foo\.#foo_#g

s后面的第二个字符可以是任意字符,sed将使用该字符作为分隔符。

有趣的是,如果您只想搜索并替换点,则必须将点放入字符集中。由于某种原因,在sed命令中仅转义点是行不通的。点仍然扩展为单个字符通配符

$ bash --version  # Ubuntu Lucid (10.04)
GNUBash,版本4.1.5(1)-发行版(x86_64-pc-linux-GNU)

“----------”

aa bb cc

随着搜索中主角的加入,转义程序开始工作

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

当然,将点放在字符集中也是有效的

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

--
保罗

对于我自己来说,
sed's/foo\/foo\ug'
正在工作。但您也可以尝试:

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


谢谢我不需要对“foo”中的“”进行转义。请查看“正则表达式”部分的手册页,以了解您可以在表达式的左侧和右侧使用什么。另外,请看一下POSIX.2正则表达式的解释。
sed不熟悉,但在第二个示例中,最后一个
/
确实是必需的,哪里使用了
#
作为分隔符?@binaryLV:谢谢-不需要它。你能给我们看一下
file.php
中的一些行吗?替换不能正常工作?你试图用shell来转义点,所以sed将其视为“任何字符”。尝试
echo foo8 | sed s/foo\/foo\ug
,您仍然会得到
foo
。为了防止shell逃逸,请使用引号:
echo aa.bb.cc | sed's/\./-/g'
将给出
aa-bb-cc
$ echo foo. | sed s/foo[.]/foo_/g  # also works
sed -e 's/foo\./foo_/g'
sed -e "s/foo\\./foo_/g"
sed 's/foo[.]/foo_/g'