在不同长度的字符串中交换特定位置的字符

时间:2012-09-23 11:23:55

标签: bash sed character swap

我一直在努力学习sed,我在这里找到的例子是用于交换05082012到20120805的日期,我无法根据当前的需要调整它们。

对于nsupdate脚本,我需要将IP地址10.4.13.22转换为22.13.4.10的反向查找。我最大的问题是有时每个八位字节都可以改变长度,例如: 10.4.13.2和10.19.8.126

感谢您的帮助!

echo 10.0.2.99 | sed 's/\(....\)\(....\)/\2\1/'

这是我目前所尝试的,只是基于这里的另一个问题,但由于这些例子没有提供太多解释,因为......意思是,我无法理解它的作用。

这是该命令.2.910.09的输出,我期待99.2.0.10

直接,我想重新排列由“。”

分隔的每个“部分”

1 个答案:

答案 0 :(得分:6)

“反向”IPv4地址的“强力”方法是:

sed 's/\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)\.\([0-9]\+\)/\4.\3.\2.\1/g'

或者,对于GNU sed,

sed -r 's/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/\4.\3.\2.\1/g'