Я хотел бы работать с последними 7 строками файла с помощью sed независимо от длины файла.
Согласно связанному с этим вопросу, этот тип диапазона не будет работать: $-6,$ {..commands..}
Какой эквивалент будет?
Я хотел бы работать с последними 7 строками файла с помощью sed независимо от длины файла.
Согласно связанному с этим вопросу, этот тип диапазона не будет работать: $-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
ed
иногда правильно. В конце концов, ed
— это «стандартный текстовый редактор» (согласно руководству 7-го издания).
- person Jonathan Leffler; 24.01.2011
perl -lne 'END{print join$\,@a,"-",@b}push@a,$_ if@a<6;push@b,$_;shift@b if@b>7'
В блоке END{}
вы можете делать все, что требуется; @a
содержит первые 6, @b
последние 7 строк по запросу.
Это должно сработать для вас:
sed '1{N;N;N;N;N};N;$s/foo/bar/g;P;D' inputfile
Объяснение:
1{N;N;N;N;N}
- когда первая строка будет прочитана, загрузите пространство шаблона еще пятью строками (всего: 6 на данный момент)N
- добавить еще одну строку$s/foo/bar/g
- когда будет прочитана последняя строка, выполнить некоторую операцию над всем содержимым пространства шаблонов (последние семь строк файла). Операции могут быть более сложными, чем показано здесьP
- печатать тест перед первой новой строкой в пространстве шаблоновD
— удалить только что напечатанный текст и перейти к началу скрипта (этап «добавить еще одну строку» — первая инструкция пропускается, поскольку она применяется только к первой строке в файле)Это может сработать для вас:
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
не подходит для этой работы. (б) Если вы достаточно извращенны, чтобы настаивать, вы можете исследовать пространство хранения и пространство шаблонов и попытаться оставить только семь строк в пространстве хранения (или, может быть, 6), а затем обработать пространство удержания, когда пространство шаблона будет для последняя строка. Но это чертовски сложно - я бы не стал заморачиваться (и я делал страшные вещи сsed
, но наступает момент, когда вы выбираете правильный инструмент для работы). - person Jonathan Leffler   schedule 24.01.2011