【问题标题】:GNU sed In Windows and Line Termination CharacterWindows 中的 GNU sed 和行终止符
【发布时间】:2011-11-02 07:14:38
【问题描述】:

对于在 Windows/DOS 版本的 GNU sed 中使用什么字符来终止一行有点令人困惑。特别是,N 命令后用于连接 2 行的换行符 (\r\n vs \n) 字符是什么?

我想要的是创建一个脚本,结合使用行继续符 \ 语法的 C++ 源代码行。

例如

int \
a=\
10;

应该由我的脚本组合成这个:

int a=10;

显然我应该使用类似“N”命令和“s”命令来替换模式空间中看起来像 \ 的任何内容,然后是带有空字符串的换行符。但在 Windows 中,这个换行符是 \r\n 还是 \n 在“N”命令之后?

我应该使用 \\\r\n 还是 \\\n 来搜索具有续行模式的行?

【问题讨论】:

    标签: sed gnu


    【解决方案1】:

    我不太确定 sed 的 Windows/DOS 版本,但如果它像 this question 中的版本,它会神奇地将 \r\n 转换为 \n 进行处理。就像在链接的问题中一样,您可能需要一个额外的s/$/\r/ 才能将\r 放回原处。我测试过

    sed -e :a -e '/\\$/N; s/\\\n//; ta; s/$/\r/'
    

    在 Cygwin 中,它似乎可以工作。

    【讨论】:

    • 如果我可以给更多的赞,我会的。
    【解决方案2】:

    我应该使用 \\r\n 还是 \\n 来搜索具有续行模式的行?

    为什么不同时使用?即在sed

    s/\r\?\n//g
    

    这将匹配\r\n\n。如果您使用的是 ERE,? 可能不需要转义。

    【讨论】:

      【解决方案3】:

      在 Windows 上使用 GNU sed 时,您不必担心 \r\n 与 \n。程序以“文本”模式打开文件,该模式将 \r\n 视为 Unix 系统上的 \n 字符。

      当您想禁用此模式并将\r视为非结束-时,可以在Windows机器上使用'-b'或'--binary'选项行外字符,例如在行的“中间”搜索“\r”(即以“\n”结尾)

      【讨论】:

      • 用'N'命令连接两行用什么?
      猜你喜欢
      • 1970-01-01
      • 2017-06-27
      • 2022-11-26
      • 2014-08-08
      • 2016-03-19
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2020-10-03
      相关资源
      最近更新 更多