Оболочка многострочного выбора от слова к символу - PullRequest
0 голосов
/ 06 октября 2018

.textexpandrc

[yoro] よろしくお願いします。
[ohayo] おはようございます。
元気ですか?
[otsu] お疲れさまでします。

Ищете

$ KEY=ohayo; awk "???"  ~/.textexpandrc 
おはようございます。
元気ですか?

awk или sed - это хорошо, но я бы не хотел использовать смесь awk / sed / perl / tr /вырезать и т. д., потому что у меня сложилось впечатление, что awk достаточно устойчив, чтобы справиться с этим самостоятельно.

Лучшее, что я мог найти самостоятельно, было

$ KEY=ohayo; awk "/\[${KEY}/,/\[otsu/"  ~/.textexpandrc | sed "s/\[${KEY}\] //" | grep -v otsu
おはようございます。
元気ですか?

Но мне нужно знатьследующий ключ заранее (не невозможно, но некрасиво).Странно, если при запросе awk искать до квадратной скобки, он не может выбрать многострочное

$ KEY=ohayo; awk "/\[${KEY}/,/\[/"  ~/.textexpandrc                                      
[ohayo] おはようございます。

В настоящее время используется однострочный анализатор, как указано ниже

#!/usr/bin/env bash

CONFIG=${HOME}/.textexpandrc
ALL_KEYS=$(sed 's/\].*/]/' ${CONFIG} | tr -d '[]')
KEY=$(echo $ALL_KEYS | rofi -sep ' ' -dmenu -p "autocomplete")

grep "\[${KEY}\]" $CONFIG | sed "s/\[${KEY}\] //" | xsel -ib  # ← HERE
xdotool key ctrl+shift+v

1 Ответ

0 голосов
/ 07 октября 2018

Если вы установите переменные RS и FS для соответствия [ и ], это будет работать достаточно хорошо:

awk 'BEGIN{ RS="\["; FS="\] " };  $1 ~ key { print $2 }' key=ohayo tmp.txt

Вы передаете искомый параметриспользуя key=.... в командной строке вместо установки переменной.Это значительно облегчает написание скрипта awk в одинарных кавычках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...