2012-09-23 46 views
4

我一直在试图学习sed,我在这里找到的例子是用于交换从05082012到20120805的日期,并且我无法适应它们以满足当前的需要。sed在不同长度的字符串中的特定位置交换字符

我需要将IP地址10.4.13.22转换为对nsupdate脚本的反向查找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

直接,我想由分隔每个“部分”重新安排“”

+0

能否请您提供简短的输入/输出的例子吗?也是你目前的命令。你可以[编辑]你的文章添加信息。 –

+0

我更新了更多信息 –

+0

而这种情况下所需的输出是..? '99.2.0.10'? –

回答

5

A “暴力破解” 的方法来 “反向” 的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' 
+0

谢谢,我看到[0-9] +如何允许不同的长度和\。表示分隔符,\ 4 \ 3 \ 2 \ 1是反向重新排序的不同变量。非常优雅,你只是帮助我更了解sed。祝你有美好的一天! –

+0

@ACiDGRiM没问题:)下面是一些链接,如果您有兴趣:['sed' reference](http://www.grymoire.com/Unix/Sed.html),['sed'正则表达式](http://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html)。 –

相关问题