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)で始まり、前にスペース文字が続きます。

おすすめ記事