Rengin değiştirilmesi metne gömülü kaçış dizileri aracılığıyla yapılır . Her zaman, programlar ANSI kaçış dizileri yayınlamaktadır , çünkü günümüzde neredeyse tüm terminaller bunu desteklemektedir.
Ön plan rengini kırmızıya çevirmek için kaçış dizisi \e[31m
, \e
bir kaçış karakteri (sekizli 033, onaltılık 1b, ESC olarak da bilinir ^[
) ve diğer çeşitli gösterimlerdir. 30-39 aralığındaki sayılar ön plan rengini ayarlar; diğer sayılar farklı öznitelikler ayarlar. \e[0m
tüm nitelikleri varsayılan değerlerine sıfırlar. cat -v
Programın ne yazdırdığını kontrol etmek için çalıştırın , \e[0;31m
önce tüm öznitelikleri sıfırlamak veya \e[3;31
italikleri açmak (bazı terminallerin desteklemediği) gibi bazı değişkenler kullanabilir .
Ksh, bash veya zsh'de, $'…'
tırnak işareti içinde ters eğik çizgi kaçışlarını etkinleştirmek için kullanabilirsiniz , bu $'\e'
da bir kaçış karakteri elde etmenizi sağlar . Daha sonra geçmek istediğiniz ters eğik çizgiyi ikiye katlamanız gerekeceğini unutmayın grep
. İçinde /bin/sh
, "$(printf \\e)"
değişmez bir kaçış karakteri kullanabilir veya yazabilirsiniz.
GNU grep -o
seçeneğiyle, aşağıdaki snippet, kaçış dizisiyle başladığını , aynı satırla veya aynı satırla \e[31m
biteceğini ve gömülü kaçış dizisi içermediğini varsayarak kırmızı metni filtreler .\e[0m
\e[30m
grep -Eo $'\e\\[31m[^\e]*\e\\[[03]?m'
Aşağıdaki awk
kod parçası, çok satırlı olsa bile kırmızı metni ayıklar.
awk -v RS='\033' '
match($0, /^\[[0-9;]*m/) {
color = ";" substr($0, 2, RLENGTH-2) ";";
$0 = substr($0, RLENGTH+1);
gsub(/(^|;)0*[^03;][0-9]*($|;)/, ";", color);
red = (color ~ /1;*$/)
}
red'
Birden fazla rengi (burada kırmızı ve macenta) filtreliyorsanız faydalı olabilecek renk değiştirme komutlarını koruyan bir varyasyon.
awk -v RS='\033' '
match($0, /^\[[0-9;]*m/) {
color = ";" substr($0, 2, RLENGTH-2) ";";
printf "\033%s", substr($0, 1, RLENGTH);
$0 = substr($0, RLENGTH+1);
gsub(/(^|;)0*[^03;][0-9]*($|;)/, ";", color);
desired = (color ~ /[15];*$/)
}
desired'
>&1
mı? Demek istediğim, eğer kırmızı şeyler gitmezse2>/dev/null
, değil mi?