Действительно ли возможно соответствовать нескольким определенным номерам строки (не, располагаются) с sed?

От man awesome кажется, нет привязки клавиш по умолчанию для закрытия всех окон приложения. Могло бы быть возможно вручную добавить такую привязку.

Существует, однако, привязка клавиш по умолчанию для закрытия той сфокусированный window*: Mod4-Shift-c. Это оставит другие окна (если таковые имеются) приложения неповрежденными. Это не работает на подокна ("логические" окна как вкладки, которые являются частью единственного окна приложения).

* Или "клиент", как это известно с точки зрения X в противоположность пользователю.

9
01.03.2014, 11:18
3 ответа
echo ... | sed -e '3a test' -e '5a test'

Если операция более сложная, чем в этом случае, вы можете использовать такую ​​структуру:

sed 'b pattern; : action; a \
lalala
b end; : pattern; 3b action; 5b action; : end'

То есть. вы помещаете все необходимые команды между шаблон b; и b end; .

И вы добавляете все свои шаблоны (номера строк или что-то еще) после : pattern; .

Происходит следующее:

  1. Первая команда перескакивает через часть действия (возможно, легче читать, если шаблоны находятся в начале, а b end; непосредственно перед частью действия).

  2. Если шаблон совпадает, выполнение переходит к части действия. После действия часть выполнения переходит к завершению.

Я пытаюсь привести это в порядок:

sed '3b action; 5b action; b end; : action; a \
lalala
: end'

В одной строке будет примерно так:

sed "3b idAction; 5b idAction; b; : idAction; a test"

Переносно, вам нужно написать это:

sed '
   3b action
   5b action
   b
   : action
   a\
   lalala'

( b без ответвлений меток до конца, поэтому вам не нужна явная метка end , ; является допустимым символом в метке в стандартных реализациях sed ).

9
27.01.2020, 20:05

С sed (см. Ответ @ HaukeLaging )

С awk :

$ echo -e "a\nb\nc\nd\ne\nf\ng\nh" | awk 'NR==3 || NR==5{$0=$0"\ntest"}1;'

С perl :

$ echo -e "a\nb\nc\nd\ne\nf\ng\nh" | perl -pe '$_ .="test\n" if $. == 3 || $. == 5'
5
27.01.2020, 20:05

Как уже сказал @HaukeLaging, эта команда делает то, что вы хотите:

sed -e'3a test' -e'5a test'

Теперь, это может стать довольно громоздким для ввода, если вы хотите сопоставить, например, 20 строк.

В таких случаях, если ваша оболочка поддерживает расширение скобок, вы можете использовать эту команду:

sed -e{3,5}'a test'

(Обратите внимание, что скобки и запятая должны оставаться без кавычек.)

В результате оболочка передаст аргументы -e3a test и -e5a test в sed, что в точности соответствует первой команде.

3
27.01.2020, 20:05

Теги

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