【问题标题】:sed working on one system but not on othersed 在一个系统上工作,但在另一个系统上不工作
【发布时间】:2012-01-07 22:49:43
【问题描述】:

这是我的输入文件..

 [root@localhost scripts]# cat ip6hdr.txt | xargs -n4
 6000 0000 005C 3320
 2001 0000 0000 0000
 0000 0000 0000 0100
 2001 0000 0000 0000
 0000 0000 0000 0200

我想将文件第一行的最后两位数字(即20)更改为00

我试过这个..

cat ip6hdr.txt | xargs -n4 | sed '1,1s/\([0-9]*\) \([0-9]*\) \([0-9]*\) \([0-9][0-9]\)\([0-9][0-9]\).*/\1 \2 \3 \400 /' 

以前它在 ubuntu 上运行良好,现在在 bash 脚本中无法在 fedora 上运行

我没有理由为什么它可以在一个系统上运行而不是在另一个系统上运行..

 [root@localhost scripts]# sed --version
 GNU sed version 4.1.5
 Copyright (C) 2003 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
 to the extent permitted by law.

如果可能的话,建议我一些替代方案..

【问题讨论】:

  • 检查您的 sed 版本,即sed --version。还有为什么复杂的表达式,为什么不是 sed '1s/..$/00/' ?祝你好运。
  • 您的问题是什么?涉及的 sed 版本有哪些?
  • @shellter 感谢并为那个简单的 +1 ..

标签: regex linux bash sed


【解决方案1】:

为什么要把事情复杂化?

$ cat File
6000 0000 005C 3320
6000 0000 005C 3320

$ sed '1s/..$/00/;' File
6000 0000 005C 3300
6000 0000 005C 3320

【讨论】:

    【解决方案2】:

    您可能缺少 -e 来指示您的 sed 表达式,并且 Ubuntu sed 更新且更宽松。更简单的表达式可能会更好一些:

    .... | sed -e '1s/[0-9][0-9]$/00/'
    

    【讨论】:

    • 即使 Sun3 sed 也不需要 -e。我只在复制/粘贴解决方案时使用它(几乎);-) 祝大家好运!
    【解决方案3】:

    您应该使用[0-9a-fA-F] 而不是[0-9]

    【讨论】:

    • 顺便说一句,你为什么使用这么复杂的 sed?为什么不用sed -e '1 s/[0-9a-fA-F]{2}$/20/' 代替(我的意思是使用$ 将其粘贴到行尾)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多