Изменить строку в sed?

echo 1234 | sed ' /\n/ !G s/\(.\)\(.*\n\)/&\2\1/ //D s/.// ' 

Я не могу понять вышеупомянутый код sed .

я понимаю:

 PATTERN SPACE=1234 first operation /\n/ !G ---> 1234\n(if \n is not found it is appended at th end) s/\(.\)\(.*\n\)/&\2\1/ ----> 1234\n234\n1 //D ----> \n234\n1(deletes upto newline and commands from the beginning are applied to the existing pattern space) PATTERN SPACE=\n234\n1 second operation /\n/ !G ---> skipped since \n234\n1 has newline now s/\(.\)\(.*\n\)/&\2\1/ ----> \n234\n1234\n //D ----> \n234\n1234\n 

Кажется, я делаю что-то неправильно.

One Solution collect form web for “Изменить строку в sed?”

В этом коде есть цикл, который становится запутанным. Этот бит:

  s/\(.\)\(.*\n\)/&\2\1/ //D 

Сохраняет цикл, перемещая символы 234\n1 до 34\n21 до 34\n21 пор, пока мы не останемся с \n4321 , где он выпадет из цикла.

Описание catonmat – это пятно, поэтому я включаю его здесь: 37. Переверните строку (эмулирует команду «rev» Unix). ,

выдержка

Первая строка "/\n/ !G" добавляет новую строку в конец пространства шаблонов, если ее не было.

Вторая строка "s/\(.\)\(.*\n\)/&\2\1/" – простое выражение s/// которое группирует первый символ как \1 и все остальные как \2 , Затем он заменяет всю согласованную строку символом "&\2\1" , где "&" – весь согласованный текст ( "\1\2" ). Например, если входная строка «1234», то после выражения s/// она становится "1234\n234\n1" .

Третья строка – "//D" . Это утверждение является ключевым в этом однострочном лайнере. Пустой шаблон // соответствует последнему существующему регулярному выражению, поэтому он точно такой же: /\(.\)\(.*\n\)/D . Команда «D» удаляет с начала ввода до первой новой строки, а затем возобновляет редактирование с помощью первой команды в скрипте. Он создает цикл. Пока /\(.\)\(.*\n\)/ , sed возобновит все предыдущие операции. После нескольких циклов текст в пространстве шаблонов становится "\n4321" . Тогда /\(. /\(.\)\(.*\n\)/

Четвертая строка "s/.//" удаляет первый символ в пространстве шаблонов, который является символом новой строки. Содержимое в пространстве шаблонов становится "4321" – реверсом "1234" .

Там у вас есть, линия была отменена.

  • Как я могу использовать Unix для переименования всех html-файлов по их названиям?
  • sed и строка данных
  • Извлечь тройной обратный код, огороженный кодовым блоком `` `выдержки из файла уценки
  • Использование sed для удаления строки из списка файлов не выполняется
  • строка 24: командная команда unterminated `s '
  • Проблема декодирования вывода регулярного выражения {m, n} в sed
  • sed строка не соответствует. Зачем?
  • Как сопоставить соответствие шаблону и остановить его после последнего совпадения
  • Как я могу отсортировать эти имена каталогов численно?
  • Измените «\ n» на «|» между двумя шаблонами (шаблоны исключены) с sed
  • Заменить последовательность символов одинаковым количеством символов
  • Interesting Posts

    Как подключить файл NRG в Linux?

    Доступ к портам для публичного IP-адреса из тюрьмы FreeBSD

    Каков наиболее эффективный способ добавления миллисекунд к этому коду?

    эквивалент xmodmap в bash

    использовать bash для передачи 2 переменных в Makefile

    Как изменить рабочий каталог вызова оболочки с помощью скрипта?

    Проблема с ядром при установке VirtualBox

    Linux Deepin Language Switcher – делает его более плавным, как в Ubuntu

    Браузер Chromium не позволяет установить формат бумаги по умолчанию для «Печать в файл»,

    Microsoft, похоже, блокирует электронную почту из пользовательского домена для любого адреса, кроме одного

    Что такое # @ (#) в синтаксисе Корншелла

    Предотвращение активного удаления файлов в файловой системе NFS

    32-разрядная версия с 64-битным и ARM в отношении программ и ОС

    живой загрузочный крошечный дистрибутив для тестирования ЖК-мониторов?

    Как изменить сортировку результата из grep -rc

    Linux и Unix - лучшая ОС в мире.