Подтвердить что ты не робот

Sed line, все, кроме последней строки

Вы можете указать диапазон строк для работы. Например, для работы со всеми строками (что, конечно, по умолчанию):

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

Но мне нужно работать на всех, кроме последней строки. Вы, по-видимому, не можете использовать арифметические выражения:

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

(я использую cygwin в этом случае, если это имеет значение)

4b9b3361

Ответ 1

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

Это будет соответствовать каждой строке, кроме последней. Подтверждено быстрым тестом!

Ответ 2

Эта команда работает тоже

sed '$d'

Ответ 3

Я знаю, что это не sed, но я чувствую, что head получает самый простой и гибкий способ:

head -n -1 the-file

Используйте -2, -3... вместо -1, чтобы получить все, кроме двух последних строк, и т.д.

Ответ 4

Хорошо, вы могли бы взломать его примерно так:

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

Ответ 5

В более общем смысле эта проблема требует, чтобы вы отредактировали поток, указав диапазон с одним из пределов диапазона, являющимся смещением от конца файла. В следующем примере показано, как это сделать. В этом примере я печатаю все строки файла, начиная с 5-й строки из последней строки и заканчивая последней строкой. В вашем случае вы можете установить OFFSET = -1 вместо OFFSET = -5.

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

Эта команда может быть введена в одну строку.