彩色文本示例(由 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
) 开头,前面有一个空格字符。