如何匹配如下的模式
input: 0xabcdxx 0xdefxxcf 0x12345xad
output: 0xabcd00 0xdef00cf 0x123450ad
我希望将x替换为0,但是单词开头的初始0x应该保持不变。 perl / sed oneliner可以这样做吗? 提前谢谢
答案 0 :(得分:2)
使用sed
:
echo "0xabcdxx 0xdefxxcf 0x12345xad" | sed 's/\b0x/Y/g; s/x/0/g; s/Y/0x/g'
首先用可区分的模式替换单词开头的0x
模式(我使用'Y'
)。然后将所有x
替换为0
,并将Y
替换为0x
。
答案 1 :(得分:0)
$ echo '0xabcdxx 0xdefxxcf 0x12345xad' |
perl -pe's/(?<!^0)(?<!\s0)x/0/g'
0xabcd00 0xdef00cf 0x123450ad
也许快一点:
$ echo '0xabcdxx 0xdefxxcf 0x12345xad' |
perl -pe's/x(?<!^0x)(?<!\s0x)/0/g'
0xabcd00 0xdef00cf 0x123450ad