举个例子:
/etc/passwd root:x:0:0:root:/root:/bin/bash 改为: root:x:0:0:root:/:/bin/bash 看 sed 教学和文档,理解上用 sed -i s/:root:/root:/:root:/:/g /etc/passwd 会提示字符有错误 如果必须用 sed 替换这样含有:,或者其他 ASCII 标点符号的字符串的操作,正确语法应该是什么?

举个例子:
/etc/passwd root:x:0:0:root:/root:/bin/bash 改为: root:x:0:0:root:/:/bin/bash 看 sed 教学和文档,理解上用 sed -i s/:root:/root:/:root:/:/g /etc/passwd 会提示字符有错误 如果必须用 sed 替换这样含有:,或者其他 ASCII 标点符号的字符串的操作,正确语法应该是什么?
1 rrfeng Jan 16, 2023 sed -i s @/root@/@ |
2 ETiV Jan 16, 2023 via iPhone LS+1 简单说就是换一个文件里没有的标记符号,我习惯用单引号 |
3 simplereasy Jan 16, 2023 sed -i 's/\/root:.\+/\/root:\/bin\/bash/g' /etc/passwd |
4 simplereasy Jan 16, 2023 应该是反斜杠转义 |
5 simplereasy Jan 16, 2023 @simplereasy 我这是直接粘过来的,应该把后边的 root 去掉,也就是 sed -i 's/\/root:.\+/\/:\/bin\/bash/g' /etc/passwd |
6 haffner Jan 16, 2023 via iPhone 换个分隔符就行,把你的语句改成 sed -i s#:root:/root:#:root:/:#g /etc/passwd |
7 bao3 Jan 17, 2023 via iPhone 换成是人在读,你遇到 一句指令里全是 / 你自己也困惑。 所以你用转义是没问题,问题是你应该转义的 / ,也就是应该 \/ 当然 1# 同时解决了你分隔符和搜索逻辑的问题,是非常不错的解法。 |