我这样运行脚本:
echo "0x4e46436b|0x6669746f|0x74616369|0x416e6f69|0x624f796e|0x7463656a"|perl -pe 's/0x([\da-f]{2}){4}/0x\4\3\2\1/g'
我明白了:
0x6b|0x6f|0x69|0x69|0x6e|0x6a
如何修复脚本以获取如下结果:
0x6b43464e|0x6f746966|0x69636174|0x696f6e41|0x6e794f62|0x6a656374
谢谢!
替代方法:perl -pe's / 0x \ K([\ da-f] {8})/解压缩“ H *”,压缩“ V”,十六进制$ 1 / eg'– ikegami
感谢池上!对我来说,这是全新的替代用法。可行!
答案 0 :(得分:0)
您可以从替换模式中引用的组数仅限于该模式中定义的捕获组数。查看有关repeated capturing groups here的更多详细信息。 0x([\da-f]{2}){4}
模式中只有1个捕获组,这意味着您不能在替换模式中使用$2
或$3
占位符。
您可以使用多个捕获组,因为您已固定了 个重复({4}
量词只能设置四个):
echo "0x4e46436b|0x6669746f|0x74616369|0x416e6f69|0x624f796e|0x7463656a" | \
perl -pe 's/0x([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})/0x$4$3$2$1/g'
请参见online demo
请注意,使用perl时,替换模式内的占位符为advised to use $n
notation。