文字列の色の単語をエスケープする

文字列の色の単語をエスケープする

私は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がコメントで要求したように、スタンドアロンユーティリティでカラーシーケンスを削除できることは便利です。

おすすめ記事