您可以指定一系列要在其上操作的行。例如,在所有线路上使用,(这是当然的默认设置):sed线范围,除了最后一行
sed -e "1,$ s/a/b/"
但我需要在所有但最后一行运行。你显然不能用算术表达式:
sed -e "1,$-1 s/a/b/"
(我用的cygwin在这种情况下,如果有差别)
您可以指定一系列要在其上操作的行。例如,在所有线路上使用,(这是当然的默认设置):sed线范围,除了最后一行
sed -e "1,$ s/a/b/"
但我需要在所有但最后一行运行。你显然不能用算术表达式:
sed -e "1,$-1 s/a/b/"
(我用的cygwin在这种情况下,如果有差别)
sed -e "$ ! s/a/b/"
这将匹配除最后一行以外的每一行。通过快速测试证实!
嗯,你可以有这样的本事:
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
此命令的作用,也
sed '$d'
在更普遍的意义上说,这个问题需要你指定一个范围,以编辑流与范围限制一个是从最终的文件偏移。以下示例显示如何执行此操作。在这个例子中,我打印出文件的所有行,从最后一行的第5行开始,到最后一行结束。在你的情况下,你可以设置OFFSET = -1
而不是OFFSET = -5
。
((OFFSET = -5)); ((N1 = $(cat pgen.c | wc -l) + OFFSET)); sed -n "$N1,\$p" thefile
该命令可以输入一行。
亚历杭德罗,这个答案应该被删除,介绍性的文字移动到你的替换答案。 – 2014-05-22 01:34:43
我知道这是不是sed
,但我觉得head
得到最简单,最灵活的方式:
head -n -1 the-file
使用-2,-3 ...而不是-1,检索所有,但最后两行等。
如果他想要打印出最后一行呢? – potong 2011-12-26 02:23:26