当存在点和下划线时使用 sed 搜索和替换
- 2024-11-13 08:36:00
- admin 原创
- 213
问题描述:
我如何用 sed 替换,foo.
只需foo_
运行
sed 's/foo./foo_/g' file.php
不起作用。
解决方案 1:
逃离.
:
sed 's/foo./foo_/g' file.php
例子:
~$ cat test.txt
foo.bar
~$ sed 's/foo./foo_/g' test.txt
foo_bar
解决方案 2:
有趣的是,如果您只想搜索和替换点,则必须将点放在字符集中。出于某种原因,在 sed 命令中单独转义点不起作用。点仍然扩展为单个字符通配符。
bash --version # Ubuntu Lucid (10.04)
GNU bash,版本 4.1.5(1)-发布(x86_64-pc-linux-gnu)
用破折号替换所有字符:
echo aa.bb.cc | sed s/./-/g
# --------
用破折号代替点:
echo aa.bb.cc | sed s/[.]/-/g
# aa-bb-cc
随着搜索中主角的加入,逃脱成功了。
echo foo. | sed s/foo./foo_/g # works
# foo_
当然,在字符集中放置点也是可行的。
echo foo. | sed s/foo[.]/foo_/g # also works
# foo_
解决方案 3:
使用 \ 转义点
sed 's/foo./foo_/g' file.php
如果你发现 / 和 \ 的组合令人困惑,你可以使用另一个“分隔符”
sed 's#foo.#foo_#g
s 后面的第二个字符可以是任何字符,并且 sed 将使用该字符作为分隔符。
解决方案 4:
您需要对点进行转义 - 未转义的点将匹配 foo 之后的任何字符。
sed 's/foo./foo_/g'
解决方案 5:
对于我来说,sed 's/foo./foo_/g'
这是可行的。但你也可以尝试:
sed -e 's/foo./foo_/g'
和
sed -e "s/foo\\./foo_/g"
和
sed 's/foo[.]/foo_/g'
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD