sed行范围,除了最后一行之外的所有行

时间:2009-06-03 21:38:12

标签: sed

您可以指定要操作的行范围。例如,要对所有行进行操作(当然是默认行):

sed -e "1,$ s/a/b/"

但我需要操作除了最后一行之外的所有行。你显然不能使用算术表达式:

sed -e "1,$-1 s/a/b/"

(在这种情况下我使用的是cygwin,如果有所不同的话)

5 个答案:

答案 0 :(得分:46)

sed -e "$ ! s/a/b/"

这将匹配除最后一行之外的每一行。确认快速测试!

答案 1 :(得分:14)

此命令也适用

sed '$d'

答案 2 :(得分:3)

我知道它不是sed,但我觉得head获得最简单,最灵活的方式:

head -n -1 the-file

使用-2,-3 ...而不是-1来检索除最后两行之外的所有行等

答案 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

答案 4 :(得分:-1)

在更一般的意义上,此问题要求您通过指定一个范围来编辑流,其中一个范围限制是与文件结尾的偏移量。以下示例显示了如何执行此操作。在这个例子中,我打印出文件的所有行,从最后一行的第5行开始,到最后一行结束。在您的情况下,您可以设置OFFSET = -1而不是OFFSET = -5

(( OFFSET = -5 )); (( N1 = $(cat pgen.c | wc -l) + OFFSET )); sed -n "$N1,\$p" thefile

此命令可以在一行中输入。