【问题标题】:N command in sedsed 中的 N 命令
【发布时间】:2012-11-27 21:47:22
【问题描述】:

sed 中的“N”命令与 Cygwin 的 sed(我认为是 GNU sed)和 AIX 的 sed 的工作方式不同。

$cat > input
Apple
$cat input
Apple
$sed 'N' input
$cat > input
Apple
Orange
$sed 'N' input
Apple
Orange
$

如上所示,第一个 sed 'N' input 命令没有为 AIX 的 sed 打印任何内容,因为没有新的输入行。然而,Cygwin 的 sed 打印了相同的 Apple。 一些 unix/sed 大师可以对此有所了解吗?提前致谢。

【问题讨论】:

  • 我怀疑这可能是 cygwin 中的新行的问题。在通过sed过滤之前,您可以在输入文件中尝试dos2unix

标签: unix sed aix


【解决方案1】:

FWIW,我刚刚发现此行为已在此处记录: http://sed.sourceforge.net/sedfaq6.html#s6.7.5

【讨论】:

    【解决方案2】:

    根据 POSIX 标准(我的斜体),AIX 的行为似乎是正确的:

    [2addr]N

    将输入的下一行(减去其终止的 )附加到模式空间,使用嵌入的 将附加的材料与原始材料分开。请注意,当前行号会发生变化。

    如果没有可用的下一行输入,则 N 命令动词应跳转到脚本的末尾并退出,而无需开始新的循环或将模式空间复制到标准输出。

    这是来自http://pubs.opengroup.org/onlinepubs/009695399/utilities/sed.html

    所以,您可能在 GNU sed 中发现了一个错误(或至少与 POSIX 不符)。

    【讨论】:

      猜你喜欢
      • 2013-07-08
      • 2022-07-05
      • 2014-12-13
      • 1970-01-01
      • 2023-03-20
      • 2021-10-11
      • 2014-12-07
      • 2023-03-31
      • 2011-04-28
      相关资源
      最近更新 更多