错误:命令代码无效 ~

错误:命令代码无效 ~

我实际上正在学习 sed 命令教程,我在其中运行以下命令以打印 Notes.txt 中的第 1,4,7,10,13 ..... 行。我使用的是MAC终端

sed -n '1~3p' Notes.txt

我在运行上述命令时遇到以下问题。任何帮助将更加感激。

sed: 1: "1~3p": invalid command code ~

答案1

范围ADDR1,~N地址语法是由 GNU 实现引入的非标准扩展sed。 Macos 上的实现sed是 FreeBSD 的实现或派生自 FreeBSD 的实现,并且不支持该扩展。

但是,您可以使用perlorawk代替:

perl -ne 'print if $. % 3 == 1'
awk 'NR % 3 == 1'

使用标准sed语法,您还可以执行以下操作:

sed -n 'p;n;n'

其中n;n消耗 2 行而不在每p打印一行后打印它们。

也可以看看:

sed -n 'N;N;P'

它将N后两行拉入模式空间,然后P打印第一行。

如果输入的行数不是 3 的倍数,则该行为会有所不同:

$ seq 10 | sed -n 'p;n;n'
1
4
7
10
$ seq 10 | sed -n 'N;N;P'
1
4
7

到达第 10行时N失败导致sed退出,这意味着P未运行。

相关内容