shell 从单词到字符的多行选择
shell multiline selection from word to character
.textexpandrc
[yoro] よろしくお願いします。
[ohayo] おはようございます。
元気ですか?
[otsu] お疲れさまでします。
正在寻找
$ KEY=ohayo; awk "???" ~/.textexpandrc
おはようございます。
元気ですか?
awk 或 sed 很好,但我想避免混合使用 awk/sed/perl/tr/cut 等,因为我的印象是 awk 足够强大,可以自行处理。
我自己能找到的最好的是
$ KEY=ohayo; awk "/\[${KEY}/,/\[otsu/" ~/.textexpandrc | sed "s/\[${KEY}\] //" | grep -v otsu
おはようございます。
元気ですか?
但我需要提前知道下一个密钥(不是不可能,但很难看)。奇怪的是,如果要求 awk 搜索到方括号,它无法 select a multiline
$ 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
如果您设置 RS
和 FS
变量来匹配 [
和 ]
,则效果很好:
awk 'BEGIN{ RS="\["; FS="\] " }; ~ key { print }' key=ohayo tmp.txt
您在命令行中使用 key=....
传递要搜索的参数,而不是设置变量。这使得在单引号内编写 awk 脚本变得更加容易。
.textexpandrc
[yoro] よろしくお願いします。
[ohayo] おはようございます。
元気ですか?
[otsu] お疲れさまでします。
正在寻找
$ KEY=ohayo; awk "???" ~/.textexpandrc
おはようございます。
元気ですか?
awk 或 sed 很好,但我想避免混合使用 awk/sed/perl/tr/cut 等,因为我的印象是 awk 足够强大,可以自行处理。
我自己能找到的最好的是
$ KEY=ohayo; awk "/\[${KEY}/,/\[otsu/" ~/.textexpandrc | sed "s/\[${KEY}\] //" | grep -v otsu
おはようございます。
元気ですか?
但我需要提前知道下一个密钥(不是不可能,但很难看)。奇怪的是,如果要求 awk 搜索到方括号,它无法 select a multiline
$ 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
如果您设置 RS
和 FS
变量来匹配 [
和 ]
,则效果很好:
awk 'BEGIN{ RS="\["; FS="\] " }; ~ key { print }' key=ohayo tmp.txt
您在命令行中使用 key=....
传递要搜索的参数,而不是设置变量。这使得在单引号内编写 awk 脚本变得更加容易。