替换成特殊字符'\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 年 9 月 9 日 via Android 手机上没法测试,猜测需要写成\x0 还是\u0 之类的,不一定会兼容 POSIX 。
|
2
toaruScar 2020 年 9 月 9 日 对于 sed 来说,s/regexp/replacement/flags 这个命令里,replacement 中的"\0"指代的是整个 regex match 到的部分,所以相当于你告诉 sed 把找到的“:”用“:”替换一遍,所以原封不动的给你送出来了。
如果要指代 null byte,你可以用"\x0",或者"\x0"。 |
3
toaruScar 2020 年 9 月 9 日 *可以用"\x0",或者"\o0"
|
4
AJQA 2020 年 9 月 9 日
tr ':' '\0'
tr '\:' '\\0' |
5
lazyzhang 2020 年 9 月 9 日
sed -n 's/:/\\0/gp'
|
6
kokutou 2020 年 9 月 9 日 |
7
ticotic OP |
8
ticotic OP \u0 -> \o0
|