Как перенести последнее слово в каждой нечётной строке в начало файла?
Как можно перенести в каждой нечётной строке последнее слово в начало строки? Не через awk, а именно через sed/join/paste и прочие утилиты. На awk пробовал, там вроде всё легко, а вот с sed/etc не совсем понятно
Ответы (2 шт):
Вообщем-то получилось примерно так
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
sed -r -i '1~2s/(.*)[ \t]([^ \t]+)$/\2 \1/g' ./file
Меняем каждую нечетную строку в файле сразу с заменой:
(.*) - любое количество любых символов
[ \t] - пробел или символ табуляции
([^ \t]+) - любой символ кроме пробела или табуляции
$ - символ конца строки
Для теста лучше убрать параметр -i что бы изменения выводились в stdout