나는 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가 의견에서 요청한 것처럼 독립 실행형 유틸리티로 색상 시퀀스를 제거할 수 있는 것이 유용할 수 있습니다.