문자열의 색상 단어를 이스케이프하세요

문자열의 색상 단어를 이스케이프하세요

나는 bash 스크립트에서 문자열을 색칠하는 방법과 문자열의 문자 수를 계산하는 방법을 알고 있습니다. \033[0;32m(빨간색) 및 (투명색) \033[0m과 같은 색상 표시를 사용하여 문자열을 계산하는 방법을 모르겠습니다 . 예는 다음과 같습니다:

>> echo "This is a string" | wc -c
17

>> echo -e "\033[0;32mThis is a string\033[0m" | wc -c
28

>> echo "\033[0;32mThis is a string\033[0m" | wc -c
34

도움을 주시면 감사하겠습니다.

답변1

해결 방법은 sed추가 문자를 제거하고 남은 문자 수를 계산하는 것입니다.

#!/bin/bash
E=$'\e'   # An escape character, not everything understands \e but bash does
sed "s/${E}\\[[0-9;]*.//g" | wc -c

이 패턴은 다른 많은 시퀀스도 식별할 수 있습니다. 색상만 제거하려면 .로 변경하세요 m.

| wc -c개인적으로 나는 그것을 스크립트에서 사용 하지 않을 것입니다 . @waltinator가 의견에서 요청한 것처럼 독립 실행형 유틸리티로 색상 시퀀스를 제거할 수 있는 것이 유용할 수 있습니다.

관련 정보