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

标签 windows command-line sed gnu 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

尝试用空格替换'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>输入f.f | sed -e "s/\r\n/f/g"

一个一个

bbb

抄送

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

一个一个

bbb

抄送

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

一个一个

bbb

抄送

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

最佳答案

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

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

As an aside, I'd be looking to switch to GnuWin32, if possible, which has more recent versions of sed (for example). It doesn't look like UnxUtils has had an update since 2003 based on that web page you link to. You can get individual packages from here. You're looking for coreutils which contains the bulk of the UNIX text processing toolkit.

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

tr -d "\n"

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

关于windows - GNU sed - 查找或替换空格或新行。为什么这不起作用? v3.02 与 v4.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331785/

相关文章:

linux - 如果仅最新日期(2 至 8 列)备份具有模式 "failed",则打印

windows - 如何获取 gpg-agent 的配置选项? (在 Windows 版 Git 上)

ruby - 为什么部分符号 (§) 无法正确读取,具体取决于它的创建位置?

ruby-on-rails - 在 Windows Server 2012 中部署 Ruby on Rails 应用程序

swift - 如何在 Swift 中访问程序参数?

c++ - 从命令行应用程序调用 Windows 通用对话框

java - 正则表达式风格的比较

xml - 使用 Shell 更新 XML 属性的值

c++ - 获取Windows版本的正确方法

c++ - 如何从可执行文件的多重/双重代码签名中检索信息