Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 仅使用Bash内置命令和正则表达式如何删除粗体转义字符“quot^[[1m,^[[0m”来自多行变量?_Arrays_Bash_Shell - Fatal编程技术网

Arrays 仅使用Bash内置命令和正则表达式如何删除粗体转义字符“quot^[[1m,^[[0m”来自多行变量?

Arrays 仅使用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

仅使用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 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'}”