В чем смысл: a; $! N; в команде sed?

$ (echo hello; echo there) | sed ':a;$!N;s/\n/string/;ta'
hellostringthere

Команда выше sed заменяет новый символ строки строкой «строка». Но я не знаю значения :a;$!N;s/\n/string/;ta в одинарных кавычках. Я знаю среднюю часть s/\n/string/. Но я не знаю функции первой (:a;$!N;) и последней (ta) части.

1
задан 11 May 2014 в 17:20

1 ответ

Для этих команд нет ссылки «человек» (ну, на самом деле это всего лишь «напоминание»), поэтому вам следует проконсультироваться с информационными страницами, в частности «3.7 Команды для« гуру »sed. Также есть предупреждение, что вам следует рассмотреть awk или Perl до этой точки, и они справедливо:

: LABEL [Адреса не разрешены.] Укажите расположение LABEL для команд ветвления. Во всех других отношениях нет-op. в этом конкретном примере он просто создает ярлык, не работает. [F3] можно изменить так, как если бы он был таким же, как t. ; Команды в SCRIPT или SCRIPT-FILE могут быть разделены точками с запятой (`; ') или новыми символами (ASCII 10). В этом случае нужно разделить разные команды, их можно легко заменить новыми строками. $!N Убедитесь, что это не последняя строка. s/\n/string/ выражение вашего регулярного выражения. Здесь нет ничего важного. t LABEL Вставить в LABEL только в том случае, если была успешная s ubstitution, поскольку была прочитана последняя строка ввода или была принята условная ветвь. LABEL может быть опущена, и в этом случае начинается следующий цикл. Это проверяет, где была выполнена подстановка команды (выражение регулярного выражения), и выполняет все, что находится в метке, в этом случае метка a.

Если нам нужно объяснить всю команду простым английским языком, это будет равно:

Создайте и сохраните проверку последней строки в метке a, замените все «новые» строки "для string и остановиться, когда проверка метки a верна.

1
ответ дан 24 May 2018 в 08:09
  • 1
    Steeldriver пояснил в комментарии к моему A. $!N означает N во всех строках, кроме последнего. – terdon♦ 5 May 2014 в 23:46

Другие вопросы по тегам:

Похожие вопросы: