操作する行の範囲を指定できます。たとえば、すべての回線を操作するには(もちろんデフォルトです):
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 行を除くすべてを取得するには、-1 の代わりに -2、-3... を使用します。
まあ、あなたはこのようなものでそれをハックすることができます:
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
より一般的な意味では、この問題では、範囲制限の 1 つがファイルの終わりからのオフセットである範囲を指定して、ストリームを編集する必要があります。次の例は、これを行う方法を示しています。この例では、最後の行から 5 行目から始まり、最後の行で終わる、ファイルのすべての行を出力しています。あなたの場合、OFFSET = -1
代わりに設定できますOFFSET = -5
。
(( OFFSET = -5 )); (( N1 = $(cat pgen.c | wc -l) + OFFSET )); sed -n "$N1,\$p" thefile
このコマンドは 1 行で入力できます。