使用 sed 在以句点开头的每行之前添加空格,与终端颜色兼容

使用 sed 在以句点开头的每行之前添加空格,与终端颜色兼容

彩色文本示例(由 ls 生成):

\e[0m\e[01;34m.cache\e[0m/
\e[01;34minferno\e[0m/
\e[01;34m.JUNK\e[0m/
\e[01;34m.nano\e[0m/
\e[01;34mpoo\e[0m/
\e[01;34mPrograms\e[0m/
\e[01;34mrestore\e[0m/
\e[01;34m.ssh\e[0m/
\e[34;42mWorkspace\e[0m/
a.sh
.bash_history
\e[01;32m.bash_profile\e[0m*
.bashrc
gg dd.txt

不起作用的 sed 命令:

sed -r 's/^((\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK])*[^\.])/ \1/'

我尝试通过回显包含文本的变量并将其通过管道传输到 sed 来实现此目的,如下所示:

 echo "$text" | sed -r 's/^((\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK])*[^\.])/ \1/'

我只希望任何不以句点开头的行前面都有一个空格。我花了几个小时在这上面,请帮忙。

答案1

我只希望任何不以句点开头的行前面都有一个空格。

根据此评论更新:

它应该忽略颜色。\e[01;34m.nano\e[0m/前面不应该有空格

尝试 sed

sed -E '/^\.|\\e/! s/(.)/ \1/'

例子:

echo "\e[0m\e[01;34m.cache\e[0m/
\e[01;34minferno\e[0m/
\e[01;34m.JUNK\e[0m/
\e[01;34m.nano\e[0m/
\e[01;34mpoo\e[0m/
\e[01;34mPrograms\e[0m/
\e[01;34mrestore\e[0m/
\e[01;34m.ssh\e[0m/
\e[34;42mWorkspace\e[0m/
a.sh
.bash_history
\e[01;32m.bash_profile\e[0m*
.bashrc
gg dd.txt" | sed -E '/^\.|\\e/! s/(.)/ \1/'
\e[0m\e[01;34m.cache\e[0m/
\e[01;34minferno\e[0m/
\e[01;34m.JUNK\e[0m/
\e[01;34m.nano\e[0m/
\e[01;34mpoo\e[0m/
\e[01;34mPrograms\e[0m/
\e[01;34mrestore\e[0m/
\e[01;34m.ssh\e[0m/
\e[34;42mWorkspace\e[0m/
 a.sh
.bash_history
\e[01;32m.bash_profile\e[0m*
.bashrc
 gg dd.txt

只有那些不是以点 ( .) 开头,或以“颜色” ( \e) 开头,前面有一个空格字符。

相关内容