3
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 感兴趣,因为这是与 unxutils http://unxutils.sourceforge.net/捆绑在一起的版本

更新问题-感谢paxdiablo的提示..关于gnu32win,我现在使用它而不是unxutils。它是最新的。我现在可以指定空格。还有 ghostdog 和 paxdiablo 的提示,我看到了双引号。我可以用 \d(因为使用 4.2)或空格来指定空格。但是,我仍然无法删除新行

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

啊啊啊

bb

抄送

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

啊啊啊

bb

抄送

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

啊啊啊

bb

抄送

注意:这个问题是从 2010 年开始的。现在是 2020 年。Gnuwin32 已经过时了(就像上次更新其 Gnuwin32 sed 是 2010 年,而 Sed 4.2.1 是从 2009 年开始的),Unxutils 更加过时了。因此,截至 2020 年,Gnuwin32 已经过时了十年,而 Unxutils 更像是 20 年过时了。Cygwin 仍然保持最新状态,并且截至撰写本文时,它是从 2017 年开始的 Sed v 4.4。

4

3 回答 3

6

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

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 年以来似乎没有进行过更新。您可以从这里获得单独的包裹。您正在寻找coreutils包含大部分 UNIX 文本处理工具包的内容。

但是,如果你被 UnxUtils 卡住了,我只会使用实际空间而不是十进制代码,然后我会用tr它来删除新行:

tr -d "\n"

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

于 2010-07-26T01:49:44.340 回答
2

我在 Win XP 上遇到了同样的问题,尝试打印新行“\n”时双引号不起作用。解决方案是使用来自http://unxutils.sourceforge.net/的新 UnxUpdates.zip, 它与“\n”一起工作正常。

Sed 版本状态:GNU sed 版本 4.0.7

于 2012-12-12T10:56:03.330 回答
0

在 Windows 上,使用双引号

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

要不就

sed "s/a/ /g" file
于 2010-07-26T02:02:38.643 回答