我如何0
使用以下命令替换/删除其中的sed
:
2001:0db8:03cd:0000:0000:ef45:0006:0123
使它看起来像这样:
2001:db8:3cd:::ef45:6:123
:
中间有 8 个 4 的除法。
第4块一定不能丢任何 0
和其他的,只有领导0可以去掉。
答案1
因此,您想要删除连续的0
s,但前提是它们前面有冒号。
sed -e 's/:00*/:/g'
答案2
类似的方法使用awk
:
awk '{gsub(/:0*/,":")}1' file
2001:db8:3cd:::ef45:6:123
答案3
如果您仍然对如何删除除前 4 位数字之外的任何零感兴趣,您可以这样做:
sed 'H;g;s/\(\n\([^:]*\)\)*0*/\2/g
' <<\IN
2001:0db8:03cd:0000:0000:ef0405:00060:0123
IN
输出
2001:db8:3cd:::ef45:6:123
好的,所以这全局匹配零个或多个换行符序列,后跟零个或多个非冒号字符,或者零个或多个零。第一个序列分为两个子组 - 一个包含 ewline \n
,另一个不包含。这样做的一个是\1
- 但不这样做的子群 - 并且取代它 - 是\2
。因此多余的\n
ewline 字符被删除。任何不在该序列中的匹配零都是不是根本就没有被保存——所以它们也被删除了。
换行符仅首先用 old 检索- 它会在ewline 字符H
后面附加一行以保留空格\n
(总是从空开始)- 然后g
et -通过覆盖模式空间g
来 ets旧空间。h
答案4
会
sed -r '/^..../s/:0+/:/g'
还好吗? (吉尔斯改进了答案,保持前 4 个字符不变)