gpt4 book ai didi

shell - 每个操作系统之间的 sed 命令行为差异及其含义

转载 作者:行者123 更新时间:2023-12-04 06:08:51 26 4
gpt4 key购买 nike

我在 sed 的工作行为之间遇到了一个奇怪但有效的差异。命令。坦率地说,这对我来说是一个很大的惊喜。

现在让我们看看 sed 的手册页SUSE Linux 和 HP (IA64)。

SUSE Linux:

DESCRIPTION Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.



惠普 IA64:

DESCRIPTION sed copies the named text files (standard input default) to the standard output, edited according to a script containing up to 100 commands. Only complete input lines are processed. Any input text at the end of a file that is not terminated by a new-line character is ignored



突出显示的文本似乎是工作行为的主要区别。因此,在移植期间,我的所有脚本在 HP-UX IA64 机器上都开始失败。

题 :
一种。难道没有任何底层标准强制每个供应商都与实现基本一致吗?

湾如果有一些命令可以确认而其他命令无法确认,任何人都可以发布符合标准的列表。

C。现在我有很多这样的命令用作我的项目脚本的一部分。检查/避免此类错误的最佳方法是什么 - 除了针对所有场景测试每个命令之外?

基本上在这种情况下,我将面临确认软件适用于跨供应商平台的所有情况的问题。

最佳答案

从 POSIX 的角度来看,HP-UX 忽略最后一个换行符之后的文本的行为没有任何问题。关键在于对应用的需求sed的输入文件是文本文件。这意味着可能没有任何 NUL 字节,行长度限制为 {LINE_MAX} (包括换行符)并且文件必须以换行符结尾,如果它不为空(因为行必须以换行符结尾)。如果应用程序调用 sed对于不是文本文件的输入文件,行为未定义。

这种情况下的其他常见行为包括使用不以换行符结尾的“行”运行脚本 (GNU sed) 并在缺少换行符时添加最后的换行符 (FreeBSD sed)。

100 个命令的限制似乎更有问题;我没有看到允许这种限制的句子。

POSIX.1-2008 引用:XBD 3.205 Line、XBD 3.394 Text File、XCU 4 Utilities sed。

关于shell - 每个操作系统之间的 sed 命令行为差异及其含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8028972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com