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