我实际上正在学习 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 的实现,并且不支持该扩展。
但是,您可以使用perl
orawk
代替:
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
未运行。