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

2024-01-02

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/ http://unxutils.sourceforge.net/

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

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

a aa

b bb

c cc

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

a aa

b bb

c cc

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

a aa

b bb

c cc

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


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

sed -e 's/a/ /g'

无论如何,您给出的命令在 4.2.1 中也无法工作,但是,如果您添加引号,它does工作。所以我建议你改成:

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

抱歉,我刚刚注意到您正在运行 Windows,因此您可能已经安装了 CygWin 或 GnuWin32(或同等版本)。

引号在 Windows 下的工作方式有所不同,因此您应该尝试两件事。第一个是使用"代替' quotes:

sed -e "s/a/ /g"

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

sed -e s/a/^ /g

顺便说一句,如果可能的话,我希望切换到 GnuWin32,它具有更新版本的sed http://gnuwin32.sourceforge.net/packages/sed.htm(例如)。根据您链接到的网页,UnxUtils 自 2003 年以来似乎没有进行过更新。您可以从以下位置获取单独的套餐here http://gnuwin32.sourceforge.net/packages.html。您正在寻找coreutils其中包含大部分 UNIX 文本处理工具包。

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

tr -d "\n"

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GNU sed - 查找或替换空格或新行。为什么这不起作用? v3.02 与 v4.2 的相关文章

随机推荐