替换成特殊字符'\t'可以正常输出
echo "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" | sed -n 's/:/\t/gp'
# 输出结果为:/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games
但是对于'\0',却没有替换":"为"\0"
echo "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" | sed -n 's/:/\0/gp'
# 输出的结果为:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
初学 shell,google 了下没找到想要的答案,想请教一下 原因 以及 使用 sed 替换的正确写法,多谢!
1
thedrwu 2020-09-09 04:41:59 +08:00 via Android 2
手机上没法测试,猜测需要写成\x0 还是\u0 之类的,不一定会兼容 POSIX 。
|
2
toaruScar 2020-09-09 05:30:24 +08:00 2
对于 sed 来说,s/regexp/replacement/flags 这个命令里,replacement 中的"\0"指代的是整个 regex match 到的部分,所以相当于你告诉 sed 把找到的“:”用“:”替换一遍,所以原封不动的给你送出来了。
如果要指代 null byte,你可以用"\x0",或者"\x0"。 |
3
toaruScar 2020-09-09 05:32:25 +08:00 1
*可以用"\x0",或者"\o0"
|
4
AJQA 2020-09-09 06:24:32 +08:00
tr ':' '\0'
tr '\:' '\\0' |
5
lazyzhang 2020-09-09 09:01:15 +08:00
sed -n 's/:/\\0/gp'
|
6
kokutou 2020-09-09 09:03:47 +08:00 1
|
7
ticotic OP |
8
ticotic OP \u0 -> \o0
|