Я бы хотел работать с последними 7 строками файла с помощью sed независимо от длины файла.
В соответствии с связанным вопросом этот тип диапазона не будет работать: $-6,$ {..commands..}
$-6,$ {..commands..}
Какой эквивалент будет?
Соедините вывод tail -7 в sed.
tail -7 test.txt | sed -e "s/e/WWW/"
Подробнее о трубах здесь.
Вы можете просто переключиться с sed (1) на ed (1), команды примерно одинаковы. В этом случае команда является такой же, за исключением случаев, когда нет ограничений на диапазон адресов.
$ cat > fl7.ed ed - $1 << \eof 1,7s/$/ (one of the first seven lines)/ $-6,$s/$/ (one of the last seven lines)/ w q eof $ sh fl7.ed yourfile
Это может работать для вас:
sed ':a;1,6{$!N;ba};${s/foo/bar/g;q};N;D' file
Пояснение:
:a
1,6{$!N;ba}
${s/foo/bar/g;q}
N
D
Это должно работать для вас:
sed '1{N;N;N;N;N};N;$s/foo/bar/g;P;D' inputfile
Объяснение:
1{N;N;N;N;N}
$s/foo/bar/g
P
perl -lne 'END{print join$\,@a,"-",@b}push@a,$_ if@a<6;push@b,$_;shift@b if@b>7'
В блоке END{} вы можете делать все, что требуется;@a содержит первые 6, @b последние 7 строк по запросу.
END{}
@a
@b