【问题标题】:Swap characters in specific positions in strings of varying lengths交换不同长度字符串中特定位置的字符
【发布时间】:2012-09-23 11:23:55
【问题描述】:

我一直在尝试学习 sed,我在这里找到的示例是用于将日期从 05082012 交换到 20120805,但我无法让它们适应我当前的需要。

我需要将 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

直接,我想重新排列每个用“.”分隔的“节”

【问题讨论】:

  • 您能否提供一个简短的输入/输出示例?还有你当前的命令。您可以edit您的帖子添加信息。
  • 我更新了更多信息
  • 这种情况下所需的输出是..? 99.2.0.10?
  • 是的,抱歉,应该澄清一下,已修复。

标签: bash sed character swap


【解决方案1】:

“逆向”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-9]+ 如何允许不同的长度和 \.表示分隔符和 \4 \3 \2 \1 是不同的变量重新排序相反。非常优雅,你只是帮助我更多地理解 sed。祝你有美好的一天!
  • @ACiDGRiM 没问题 :) 如果您有兴趣,这里有几个链接:sed reference, sed regular expressions
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2015-05-05
相关资源
最近更新 更多