37

操作する行の範囲を指定できます。たとえば、すべての回線を操作するには(もちろんデフォルトです):

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

しかし、私は最後の行を除いてすべてを操作する必要があります。どうやら算術式を使用することはできません:

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

(この場合、違いが生じる場合はcygwinを使用しています)

4

5 に答える 5

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

これは、最後の行を除くすべての行に一致します。クイックテストで確認!

于 2009-06-03T21:51:36.297 に答える
18

このコマンドも機能します

sed '$d'
于 2010-07-29T13:07:14.443 に答える
2

ではないことはわかっていますが、それが最も簡単で柔軟な方法sedだと思います。head

head -n -1 the-file

最後の 2 行を除くすべてを取得するには、-1 の代わりに -2、-3... を使用します。

于 2016-08-08T12:40:04.747 に答える
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
于 2009-06-03T21:47:30.003 に答える
-1

より一般的な意味では、この問題では、範囲制限の 1 つがファイルの終わりからのオフセットである範囲を指定して、ストリームを編集する必要があります。次の例は、これを行う方法を示しています。この例では、最後の行から 5 行目から始まり、最後の行で終わる、ファイルのすべての行を出力しています。あなたの場合、OFFSET = -1代わりに設定できますOFFSET = -5

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

このコマンドは 1 行で入力できます。

于 2014-05-21T16:56:02.983 に答える