Как перенести последнее слово в каждой нечётной строке в начало файла?

Как можно перенести в каждой нечётной строке последнее слово в начало строки? Не через awk, а именно через sed/join/paste и прочие утилиты. На awk пробовал, там вроде всё легко, а вот с sed/etc не совсем понятно


Ответы (2 шт):

Автор решения: Resistance杀杀杀

Вообщем-то получилось примерно так

cat text2.txt| sed "2~2d;s/\(^[А-Я][а-я ,.:;]\+\) \([а-я,.:]\+$\)/\2 \1/g" > replaced

cat text2.txt | sed "1~2d" > temp

paste -d"\n" replaced temp > main

Офк можно было без cat, но тут я начинал с того, что смотрел, как вообще выглядит сам файл.

Работает следующим образом: распечатываю файл, во всех чётных строках ищу 2 вхождения: первое - первая часть строки, не включая последнее слово, второе - последнее слово, далее делаю, грубо говоря реверс черех \2 \1 и вывожу всё в replaced. 2~2d позволяет вывести все нечётные строки.

Дальше я распечатываю все чётные строки и кладу в temp

После сцепляю их через paste

→ Ссылка
Автор решения: PotroNik
sed -r -i '1~2s/(.*)[ \t]([^ \t]+)$/\2 \1/g' ./file

Меняем каждую нечетную строку в файле сразу с заменой:
(.*) - любое количество любых символов
[ \t] - пробел или символ табуляции
([^ \t]+) - любой символ кроме пробела или табуляции
$ - символ конца строки

Для теста лучше убрать параметр -i что бы изменения выводились в stdout

→ Ссылка