【问题标题】:Reverse IP address format with sed使用 sed 反转 IP 地址格式
【发布时间】:2015-09-17 22:20:42
【问题描述】:

我有一个 txt 文件,其中包含针对域名的 IP 地址列表。例如;

1.1.168.192 example1.example1.net
2.1.168.192 example2.example2.net
3.1.168.192 example3.example3.net
.....
12.1.168.192 example12.example12.net

我无法让我的 sed 命令将输出更改为;

192.168.1.1 example1.example1.net
192.168.1.2 example2.example2.net
192.168.1.3 example3.example3.net
....
192.168.1.12 example12.example12.net

我使用的sed命令是

sed -r 's/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/\4.\3.\2.\1/'

把它当作

cat filename | sed -r 's/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/\4.\3.\2.\1/'

【问题讨论】:

  • 您不应为此使用catcat 用于连接文件。使用sed -r '...' filename,或者如果命令只从标准输入读取,使用i/o重定向:command < filename
  • 在您的示例输入/输出中添加... 行对任何人都没有帮助,这只会让我们更难测试可能的解决方案(因为我们需要在复制后编辑您的文件以删除这些文件/paste 并且我们有时不确定这些是否应该被删除或者它们是否确实存在于您的真实输入文件中)所以请不要这样做。

标签: linux bash unix sed command-line-interface


【解决方案1】:

唯一的问题是您在模式中包含了一个锚点$,它试图匹配每行的结尾但失败了。你只需要删除它:

$ sed -r 's/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/\4.\3.\2.\1/' file
192.168.1.1 example1.example1.net
192.168.1.2 example2.example2.net
192.168.1.3 example3.example3.net

请注意,我将文件名作为参数传递给 sed,从而避免了对 cat 的无用使用。

【讨论】:

    【解决方案2】:

    awk 版本

    awk '{split(".",i,$1);printf "%d.%d.%d.%d %s\n",i[4],i[3],i[2],i[1],$2}' YourFile
    

    【讨论】:

      【解决方案3】:
      $ sed -r 's/([^.]+)(\.[^.]+)(\.[^.]+)\.([^ ]+)/\4\3\2.\1/' file
      192.168.1.1 example1.example1.net
      192.168.1.2 example2.example2.net
      192.168.1.3 example3.example3.net
      192.168.1.12 example12.example12.net
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多