GNU sed - 查找或替换空格或新行.为什么这不起作用?v3.02 vs v4.2

bar*_*lop 2 windows command-line gnu sed command-prompt

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
Run Code Online (Sandbox Code Playgroud)

试图用空格替换'a'.

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

d032 d032 d032

d032 d032 d032
Run Code Online (Sandbox Code Playgroud)

为什么不工作?

我不介意我是在寻找还是替换空格或换行......我只是希望能够指定它们.它似乎没有工作,我不知道为什么.

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

C:\crp\cnp>echo a a | sed s/\d32/f/
a a
Run Code Online (Sandbox Code Playgroud)

注意 - 似乎它可能在4.2中工作,但我对3.02'cos感兴趣,这是与unxutils捆绑在一起的版本http://unxutils.sourceforge.net/

更新问题 - 感谢paxdiablo的提示......关于gnu32win,我现在正在使用它而不是unxutils.它更新了.我现在可以指定空格.和鬼狗的小费,以及paxdiablo,我看到双引号.我很好用\ d(因为使用4.2)或空格指定空格.但是,我仍然无法删除新行

C:\ crp>输入ff | sed -e"s /\r \n/f/g"

aa

b bb

c cc

C:\ crp>输入ff | sed -e"s /\d013\d010/f/g"

aa

b bb

c cc

C:\ crp>输入ff | sed -e"s /\x0D\x0A/f/g"

aa

b bb

c cc

pax*_*blo 5

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

sed -e 's/a/ /g'
Run Code Online (Sandbox Code Playgroud)

对于它的价值,您提供的命令也无法在4.2.1中工作,但是,如果您添加引号,它确实有效.所以我建议你把它改成:

sed -e 's/a/\d032/g'
Run Code Online (Sandbox Code Playgroud)

道歉,我刚刚注意到你正在运行Windows,所以你可能已经获得了CygWin或GnuWin32(或同等版本).

在Windows下,引号的工作方式不同,因此您应该尝试两件事.首先是使用"而不是'引号:

sed -e "s/a/ /g"
Run Code Online (Sandbox Code Playgroud)

否则,Windows中的转义字符是^这样的,应该能够逃避空间:

sed -e s/a/^ /g
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我想切换到GnuWin32,如果可能的话,它有更新的版本sed(例如).看起来UnxUtils自2003年以来根据您链接的网页进行了更新.您可以从这里获得个别包裹.您正在寻找coreutils包含大量UNIX文本处理工具包的内容.

但是,如果你坚持使用UnxUtils,我只会使用实际空间而不是十进制代码,然后我会用掉掉tr新行:

tr -d "\n"
Run Code Online (Sandbox Code Playgroud)

当然假设trin textutils可以处理该语法:-)