代码之家  ›  专栏  ›  技术社区  ›  barlop Sandeep

GNU SED-查找或替换空格或新行。为什么这不起作用?V3.02 vs V4.2

  •  2
  • barlop Sandeep  · 技术社区  · 15 年前
    C:\crp\cnp>sed -V
    
    GNU sed version 3.02
    
    Copyright (C) 1998 Free Software Foundation, Inc.......
    
    
    C:\crp\cnp>type f.f
    
    a a a
    
    a a a
    

    试图用空格替换“a”。

    C:\crp\cnp>type f.f | sed -e s/a/\d032/g
    
    d032 d032 d032
    
    d032 d032 d032
    

    为什么不起作用?

    我不介意我是在寻找或替换空格还是新行。我只想能够指定它们。它似乎不起作用,我也不知道为什么。

    (用f替换空格或空格不起作用)

    C:\crp\cnp>echo a a | sed s/\d32/f/
    a a
    

    注意-它在4.2版本中可能有效,但我对3.02’cos感兴趣,因为它是与unxutils捆绑的版本。 http://unxutils.sourceforge.net/

    更新到问题- 多谢帕克迪亚布洛的小费。关于gnu32win,我现在使用它而不是unxutils。它是最新的。我现在可以指定空格了。还有幽灵狗的提示,还有paxdiablo,我看到了双引号。我可以用\d(因为使用4.2)或空格指定空格。 但是,我还是不能删除新行

    C:\CRP>类型F.F_SED-E“S/\r\n/F/G”

    aaa

    BB

    立方厘米

    C:\CRP>F.F_SED-E“S/\D013\D010/F/G”型

    aaa

    BB

    立方厘米

    C:\CRP>类型F.F_SED-E“S/\X0D\X0A/F/G”

    aaa

    BB

    立方厘米

    3 回复  |  直到 13 年前
        1
  •  5
  •   paxdiablo    15 年前

    为什么不使用空格字符本身而不是一些有趣的编码?如:

    sed -e 's/a/ /g'
    

    就其价值而言,您给出的命令在4.2.1中也无法工作,但是,如果您添加引号,它将 工作。所以我建议你把它改成:

    sed -e 's/a/\d032/g'
    

    抱歉,我刚注意到你在运行Windows,所以你可能有Cygwin或Gnuwin32(或同等产品)。

    引号在Windows下的工作方式不同,因此您应该尝试两种方法。第一个是使用 " 而不是 ' 引用:

    sed -e "s/a/ /g"
    

    否则,Windows中的转义符是 ^ 所以像这样的东西应该能够逃离这个空间:

    sed -e s/a/^ /g
    

    顺便说一下,如果可能的话,我希望切换到gnuwin32,它有更新版本的 sed (例如)。它看起来不像unxutils自2003年以来根据你链接到的网页进行了更新。您可以从 here . 你在找 coreutils 它包含大量的Unix文本处理工具包。

    但是,如果你坚持使用非Xutils,我只使用实际的空格而不是十进制代码,然后我会使用 tr 要删除新行:

    tr -d "\n"
    

    当然,假设 TR 在里面 textutils 可以处理该语法:—)

        2
  •  2
  •   gkolarov    13 年前

    我在Win XP上遇到了同样的问题,在尝试打印新行时,双引号无效。 解决方案是使用新的unxupdates.zip http://unxutils.sourceforge.net/ 它正确地工作在“n”。

    SED版本状态: GNU SED版本4.0.7

        3
  •  0
  •   ghostdog74    15 年前

    在Windows上,使用双引号

    sed "s/a/\d032/g" file
    

    或者只是

    sed "s/a/ /g" file