Переместите последние n строк текстового файла наверх с помощью Bash - PullRequest
0 голосов
/ 11 сентября 2018

Как я могу переместить последние n строк текстового файла в верх, не зная количества строк в файле? Можно ли добиться этого с помощью одной командной строки (например, sed)?

От:

...
a
b
c
d

Кому:

a
b
c
d
...

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Это может сработать для вас (GNU sed):

sed '$!H;1h;$!d;G' file

Добавьте каждую строку, кроме последней, к пробелу , а затем добавьте пробел к последней строке.

0 голосов
/ 11 сентября 2018

Показать последние n строк, а затем отобразить остальные:

tail -n 4 file; head -n -4 file

С man head:

-n, --lines = [-] NUM

печатать первые NUM строки вместо первых 10; с начальным символом «-» выведите все NUM строки каждого файла, кроме последних

tail -n 4 отобразит последние 4 строки файла.

Если вы хотите передать эти данные, вам нужно соединить их так:

( tail -n 4 file; head -n -4 file ) | wc

Или, может быть, вы можете использовать vim для редактирования встроенного файла:

vim +'$-3,$m0' +'wq' file

Опция + для vim будет запускать команду (Ex), следующую за ней. $-3,$m0 означает перемещение строк между 3 строками над последней и последней строкой в ​​начале файла. Обратите внимание, что между + и командой не должно быть пробела.


Или используя команды в обычном режиме vim:

vim +'norm G3kdGggPZZ' file

G перейти к концу файла; 3k продвинуться на 3 строки вверх; dG удаляет до конца файла; gg перейти в начало файла; P вставляет удаленные строки перед этой строкой; ZZ сохраняет и выходит.

...