perl oneliner:匹配模式并替换匹配模式的一部分

时间:2015-11-18 13:35:41

标签: perl sed

如何匹配如下的模式

input:  0xabcdxx 0xdefxxcf 0x12345xad
output: 0xabcd00 0xdef00cf 0x123450ad

我希望将x替换为0,但是单词开头的初始0x应该保持不变。 perl / sed oneliner可以这样做吗? 提前谢谢

2 个答案:

答案 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