您可以指定要操作的行范围。例如,要对所有行进行操作,(这当然是默认设置):
sed -e "1,$ s/a/b/"
但我需要对除最后一行之外的所有内容进行操作。您显然不能使用算术表达式:
sed -e "1,$-1 s/a/b/"
(在这种情况下,我使用的是 cygwin,如果有区别的话)
您可以指定要操作的行范围。例如,要对所有行进行操作,(这当然是默认设置):
sed -e "1,$ s/a/b/"
但我需要对除最后一行之外的所有内容进行操作。您显然不能使用算术表达式:
sed -e "1,$-1 s/a/b/"
(在这种情况下,我使用的是 cygwin,如果有区别的话)
sed -e "$ ! s/a/b/"
这将匹配除最后一行之外的每一行。通过快速测试确认!
该命令也有效
sed '$d'
我知道不是sed
,但我觉得这head
是最简单和最灵活的方式:
head -n -1 the-file
使用 -2, -3... 而不是 -1,检索除最后两行之外的所有行,等等。
好吧,你可以用这样的东西破解它:
sed -e "1,$(($(cat the-file | wc -l) - 1))s/a/b/"
或者,您可以tail
改用:
(tail +1 the-file) | sed -e s/a/b/; tail -1 the-file
在更一般的意义上,这个问题要求您通过指定一个范围来编辑流,其中一个范围限制是与文件结尾的偏移量。以下示例显示了如何执行此操作。在这个例子中,我打印出文件的所有行,从最后一行的第 5 行开始,到最后一行结束。在您的情况下,您可以设置OFFSET = -1
而不是OFFSET = -5
.
(( OFFSET = -5 )); (( N1 = $(cat pgen.c | wc -l) + OFFSET )); sed -n "$N1,\$p" thefile
该命令可以在一行中输入。