.textexpandrc
[yoro] よろしくお願いします。
[ohayo] おはようございます。
元気ですか?
[otsu] お疲れさまでします。
寻找
$ KEY=ohayo; awk "???" ~/.textexpandrc
おはようございます。
元気ですか?
awk或sed很好,但我想避免同时使用awk / sed / perl / tr / cut等,因为我觉得awk足够强大,可以自行处理。 / p>
我自己能找到的最好的是
$ 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
答案 0 :(得分:3)
如果您设置RS
和FS
变量以匹配[
和]
,则效果很好:
awk 'BEGIN{ RS="\["; FS="\] " }; $1 ~ key { print $2 }' key=ohayo tmp.txt
您可以在命令行上使用key=....
而不是设置变量来传递要搜索的参数。这样可以更轻松地在单引号中编写awk脚本。