web-dev-qa-db-ja.com

シェルでテキストを強調表示する

私はいつもシェルのテキストの背景を強調するために以下の方法を使用しています。

tput smso;printf " TEXT ";tput rmso;

tput(printfの色に\e[0mのような何らかの方法でフォーマットすることを意味します)を使用せずに同じことを達成するにはどうすればよいですか?

3
g4ur4v

そのためのエスケープシーケンスは、端末固有である可能性があります。それがtputを使用することの要点です。 tputsは、$TERM変数の値に基づいて、データベース内の正しいエスケープシーケンスを検索します。

私の端末で:

$ tput smso | sed -n l
\033[3m$
$ tput rmso | sed -n l
\033[23m$

だから私はできる:

$ printf '\033[3m%s\033[23m\n' "stand out"

しかし、それが他の端末で機能するかどうかはわかりません。

毎回tputを呼び出したくない場合は、一度実行して出力を保存できます。

smso=$(tput smso)  rmso=$(tput rmso)
printf '%s\n' "${smso}stand out${rmso}"

smsoは「StartModeStand-Out」であり、リバースビデオ用ではありませんが、多くの端末はテキストを目立たせるためにリバースビデオを使用していることに注意してください。リバースビデオが必要な場合はtput revtput sgr0でキャンセル)です。背景色を設定する場合は、ANSIカラーコードにtput setab 4を使用します(4はANSIカラーの青色の数字です)。 )。

4