LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1216|回复: 6

sed 中的变量问题(含有/符号),如何替换

[复制链接]
发表于 2007-2-8 17:05:44 | 显示全部楼层 |阅读模式
如下,我想把hello/world替换成hello/china,如何作?

OLD="hello/world"
NEW="hello/china"

echo "hello/world/I love life" | sed "s/$OLD/$NEW/"
exit 0
发表于 2007-2-8 17:12:09 | 显示全部楼层
OLD="hello\/world"  ---------在/前加\
NEW="hello/china"

echo "hello/world/I love life" | sed "s/$OLD/$NEW/"
exit 0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-8 17:20:35 | 显示全部楼层
Post by Iambitious
OLD="hello\/world"  ---------在/前加\
NEW="hello/china"

echo "hello/world/I love life" | sed "s/$OLD/$NEW/"
exit 0


sed: junk after command: s/hello\/world/hello/china/
回复 支持 反对

使用道具 举报

发表于 2007-2-8 17:27:50 | 显示全部楼层
NEW="hello\/china"也加上\
回复 支持 反对

使用道具 举报

发表于 2007-2-8 17:30:54 | 显示全部楼层
如果要替换的字符串包括\那么需要在前面加上两个\\
回复 支持 反对

使用道具 举报

发表于 2007-2-9 10:35:50 | 显示全部楼层
不是非要转义
  1. [0 No.527 huanlf@huanlf ~]$ OLD="hello/world"
  2. [0 No.528 huanlf@huanlf ~]$ NEW="hello/china"
  3. [0 No.529 huanlf@huanlf ~]$ echo "hello/world/I love life" | sed "s|$OLD|$NEW|"
  4. hello/china/I love life
  5. [0 No.530 huanlf@huanlf ~]$ echo a/b/c/ | sed 's!a/b/!XX!'
  6. XXc/
  7. [0 No.531 huanlf@huanlf ~]$ echo a/b/c/ | sed 's|a/b/|XX|'
  8. XXc/
  9. [0 No.532 huanlf@huanlf ~]$
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-2-12 16:24:25 | 显示全部楼层
sed vim 里面默认的查找替换用 / 做分隔符的,如果查找替换的内容中有很多 / 的话,就必须转义,太多了,一个一个的转义不方便,而且表达式也不清晰明了。所以,可以改变他的默认分隔符号。
sed -e 's: old: new' 只要改变s后面的符号就行了,该例中分隔符为:,依次类推(空格,是我加的,不然看到的是个笑脸)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表