sed在一个系统上工作但不在另一个系统上工作

时间:2011-11-28 13:31:04

标签: regex linux bash sed

这是我的输入文件..

 [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.

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

3 个答案:

答案 0 :(得分:2)

为什么复杂化?

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

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

答案 1 :(得分:0)

您应该使用[0-9a-fA-F]代替[0-9]

答案 2 :(得分:0)

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

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