Unix `sed` 中用于就地编辑文件的选项顺序

问题描述 投票:0回答:1

sed
的手册页内容如下:

sed [-Ealnru] command [-I extension] [-i extension] [file ...]

基于此,我认为以下应该有效:

sed -E '/^A/d' -i '' tmp.txt 

其中

cat tmp.txt
给出:

A
B

但是输出是:

sed: -i: No such file or directory
sed: : No such file or directory
B

并且

tmp.txt
保持不变。

为了使上述命令正常工作,我应该执行以下操作:

sed -E -i '' '/^A/d' tmp.txt 

我的问题是,为什么?根据手册页,我首先尝试的应该是有效的。选项的顺序正如那里所描述的那样。然而它并没有起作用。

我的 Mac 运行的是 macOS 12,它基于 FreeBSD。

macos unix sed
1个回答
0
投票

POSIX 实用程序语法指南 指定选项(包括带有选项参数的选项)应位于位置参数之前。虽然 GNUish 命令行解析器将识别后面位置的选项,只要它们前面没有选项结束标志,但这种行为(正如您所观察到的)不会扩展到非 GNU 实现。

这意味着显示

-i
coming after 要运行的表达式的文档是错误的。如下重新排列你的论点:

sed -E -i '' '/^A/d' tmp.txt
© www.soinside.com 2019 - 2024. All rights reserved.