web-dev-qa-db-ja.com

sed行範囲、最後の行を除くすべて

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

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

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

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

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

26
Chris Noe
sed -e "$ ! s/a/b/"

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

47
AdamC

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

sed '$d'
14
guerda

sedではないことは知っていますが、headが最も簡単で柔軟な方法になると思います。

head -n -1 the-file

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

3
Julio

さて、あなたはこのようなものでそれをハックすることができます:

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
Adam Rosenfield