Arrays 仅使用Bash内置命令和正则表达式如何删除粗体转义字符“quot^[[1m,^[[0m”来自多行变量?
仅使用Bash v2.02内置命令和正则表达式如何从多行变量中删除粗体转义字符“^[[1m,^[[0m” 一些示例文本是: ^[[1M此处有一些粗体文字^[[0mArrays 仅使用Bash内置命令和正则表达式如何删除粗体转义字符“quot^[[1m,^[[0m”来自多行变量?,arrays,bash,shell,Arrays,Bash,Shell,仅使用Bash v2.02内置命令和正则表达式如何从多行变量中删除粗体转义字符“^[[1m,^[[0m” 一些示例文本是: ^[[1M此处有一些粗体文字^[[0m ^[[1此处有一些粗体文本^[[0m您可以使用扩展模式匹配: shopt -s extglob x=$'abc\n\e[;1mdef\e[0m\nghi' without="${x//$'\e'\[+([0-9;])m}" 这将删除变量中所有可能的颜色变化。不带extglob: x=$'\e[1mSome Bold Text her
^[[1此处有一些粗体文本^[[0m您可以使用扩展模式匹配:
shopt -s extglob
x=$'abc\n\e[;1mdef\e[0m\nghi'
without="${x//$'\e'\[+([0-9;])m}"
这将删除变量中所有可能的颜色变化。不带extglob:
x=$'\e[1mSome Bold Text here\e[0m \e[1mSome Bold Text there\e[0m'
e=$'\e'
x="${x//$e[0m/}"
x="${x//$e[1m/}"
echo "$x"
通常,您可以使用一些工具来避免首先打印ANSI转义,然后将其管道化为:perl-ne的/\e[\d+m//g;print'有效,但我知道这个脚本最终将在支持Perl的系统上运行。您给出的示例有效。但由于某种原因,我试图清理的文本不起作用。肯定是我正在弄脏的东西。Sry。因此,为了使用它,您需要启用
extglob
。这不是正则表达式,而是比标准的glob模式功能更强。这是一个涵盖所有格式(样式和颜色)的通用解决方案。我试图将$'\e\[/code>简化为$'\e['
,但在Bash 3.x中这实际上是一个错误。做得好;至少在Bash 3.2.57中,您可以简单地将ANSI C引号字符串直接嵌入替换中;例如,x=“${x//$'\e[0m/'}”
。在这种特定情况下,您甚至可以只进行一次替换:x=“${x/$'\e['?'m'}”