举个例子:
/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 2023-01-16 11:40:27 +08:00 1
sed -i s @/root@/@
|
2
ETiV 2023-01-16 11:43:44 +08:00 via iPhone
LS+1
简单说就是换一个文件里没有的标记符号,我习惯用单引号 |
3
simplereasy 2023-01-16 13:04:06 +08:00 1
sed -i 's/\/root:.\+/\/root:\/bin\/bash/g' /etc/passwd
|
4
simplereasy 2023-01-16 13:10:09 +08:00
应该是反斜杠转义
|
5
simplereasy 2023-01-16 13:13:34 +08:00
@simplereasy 我这是直接粘过来的,应该把后边的 root 去掉,也就是 sed -i 's/\/root:.\+/\/:\/bin\/bash/g' /etc/passwd
|
6
haffner 2023-01-16 14:39:32 +08:00 via iPhone 1
换个分隔符就行,把你的语句改成
sed -i s#:root:/root:#:root:/:#g /etc/passwd |
7
bao3 2023-01-17 06:06:18 +08:00 via iPhone
换成是人在读,你遇到 一句指令里全是 / 你自己也困惑。
所以你用转义是没问题,问题是你应该转义的 / ,也就是应该 \/ 当然 1# 同时解决了你分隔符和搜索逻辑的问题,是非常不错的解法。 |