Curses interface has blank spaces under GNU Screen and ssh

Здесь может быть использован несколько иной подход, который по-прежнему отвечает первоначальному вопросу "как объединить три команды sed в одну", а также улучшает саму команду. Несомненно, существует множество других подходов к решению вторичного вопроса о том, как извлечь систему init.

Вместо того, чтобы пытаться вычеркнуть то, что вам не нужно, вы можете захватить то, что вам нужно, с помощью групп захвата, и вы можете подобрать несколько значений, используя наборы символов. Набор символов обозначается скобками "[ ]". Внутри них вы помещаете именно то, что хотите сопоставить, и получаете неявный оператор OR между ними. Так, для соответствия левой кавычки И апострофу вы используете:

[\xe2\x80\x98 \x27]

Левая кавычка - это шестнадцатеричный символ "e28098", а апостроф - шестнадцатеричный символ "27". Я поставил между ними пробел, чтобы подчеркнуть, что это два отдельных символа, но технически это будет соответствовать левой кавычке ИЛИ пробелу ИЛИ апострофу. Удалите пробел, если не хотите, чтобы он совпадал. Вы можете также добавить "e28099", если хотите, чтобы совпадала правая цитата.

Чтобы улучшить саму команду и просто подтянуть либо "init", либо "systemd", можно использовать другой подход, используя группы захвата. Группы захвата обозначаются скобками "( )". Затем вы можете ссылаться на эту группу захвата. Например, я использовал эту команду для захвата именно того, что мне было нужно:

stat /proc/1/exe | sed -rn 's/^.*File:.*->.*[\xe2\x80\x98\x27]\/.*\/(.+)[\xe2\x80\x99\x27]$/\1/p'

Группа захвата (".+" между скобками) захватывает все, что находится после последней прямой косой черты, которая находится между левой кавычкой или апострофом и правой кавычкой или апострофом. На нее ссылаются, используя "\1" (поскольку это первая и единственная группа захвата). Sed заменяет всю строку только тем, что находится в группе захвата.

  • -r используется для расширенных регулярных выражений (по крайней мере, в моей версии sed)
  • -n используется для подавления печати. В сочетании с опцией "/p" он будет печатать только строки, соответствующие шаблону, но после того, как они будут заменены. Это делает sed похожим на grep.

Надеюсь, это поможет кому-нибудь еще.

1
12.11.2016, 22:01
1 ответ

Вы используете описание терминала, в котором говорится, что терминал поддерживает стирание цвета назад ( bce ), но на самом деле это не так. это.

Экран GNU настраивается (например, defbce ), но очевидно tmux - нет (см., Например, Поддержка стирания цвета фона (bce) [было: проблема с копированием и вставкой конечного пробела в Vim] # 109 )

Дополнительная литература:

2
27.01.2020, 23:34

Теги

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