好的,使用 bash 终端或在 sublime 之类的东西中查找/替换,我想找到:
BLK=$'\e[0;30m'
RED=$'\e[0;31m'
GRN=$'\e[0;32m'
YEL=$'\e[0;33m'
BLU=$'\e[0;34m'
MAG=$'\e[0;35m'
CYN=$'\e[0;36m'
WHT=$'\e[0;37m'
前 3 个字母和 =$,并用前 3 个别名替换它,前 3 个字母=“echo -e”(引用后面和最后一个引用之前的所有内容)。到目前为止,甚至还没有:
这是我陷入困境的地方:
我可以找到/替换别名(前 3 个字母),但无法完成其余部分。该正则表达式看起来像这样:
Find: ([A-Z]{3,5})(\=\$)(?:\')(\\e\[\d\;?\d{1,3}m)(?:\')
Replace: alias \1
但似乎无法完成整个事情。使用 Sublime 文本编辑器。
可能带有替换字符串;模式是正确的。 (我只熟悉 Java 并在这里发布了一个工作解决方案。请看看它是否可以帮助您创建等效的 Sublime 替代品。)
String s = "BLK=$'\\e[0;30m'\nRED=$'\\e[0;31m'\nGRN=$'\\e[0;32m'";
Pattern p = Pattern.compile( "([A-Z]{3,5})(\\=\\$)(?:\\')(\\\\e\\[\\d\\;?\\d{1,3}m)(?:\\')" );
Matcher m = p.matcher( input );
while( m.find() ){
String repl = m.replaceAll( "alias $1='echo -e $3'" );
System.out.println( repl );
}
如果您不熟悉 Java:
([A-Z]{3,5})(\=\$)(?:\')(\\e\[\d\;?\d{1,3}m)(?:\')
。$1
、$2
等,而不是 \1
、\2
等。结果
对于代码中的
input
值(我从您的问题中获取),以下是输出:
alias BLK='echo -e \e[0;30m'
alias RED='echo -e \e[0;31m'
alias GRN='echo -e \e[0;32m'