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)으로 시작하고 앞에 공백 문자가 옵니다.

관련 정보