您可以指定要操作的行范围。例如,要对所有行进行操作(当然是默认行):
sed -e "1,$ s/a/b/"
但我需要操作除了最后一行之外的所有行。你显然不能使用算术表达式:
sed -e "1,$-1 s/a/b/"
(在这种情况下我使用的是cygwin,如果有所不同的话)
答案 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
此命令可以在一行中输入。