Pergantian warna dilakukan melalui urutan escape yang tertanam dalam teks. Biasanya, program mengeluarkan urutan pelarian ANSI , karena itulah yang sebenarnya didukung semua terminal saat ini.
Urutan melarikan diri untuk mengalihkan warna latar depan menjadi merah adalah \e[31m, di mana \emenunjuk karakter pelarian (oktal 033, 1b heksadesimal, juga dikenal sebagai ESC, ^[dan berbagai sebutan lainnya). Angka dalam kisaran 30–39 mengatur warna latar depan; nomor lain mengatur atribut yang berbeda. \e[0mmengatur ulang semua atribut ke nilai standarnya. Jalankan cat -vuntuk memeriksa apa yang dicetak oleh program, mungkin menggunakan beberapa varian seperti \e[0;31muntuk mengatur ulang semua atribut terlebih dahulu, atau \e[3;31juga untuk mengaktifkan huruf miring (yang tidak didukung banyak terminal).
Di ksh, bash, atau zsh, Anda dapat menggunakan $'…'untuk mengaktifkan $'\e'escape backslash di dalam tanda kutip, yang memungkinkan Anda mengetik untuk mendapatkan karakter pelarian. Perhatikan bahwa Anda harus menggandakan backslash yang ingin Anda sampaikan grep. Di /bin/sh, Anda bisa menggunakan "$(printf \\e)"atau mengetikkan karakter pelarian literal.
Dengan grep -oopsi GNU , cuplikan berikut memfilter teks merah, dengan asumsi bahwa itu dimulai dengan urutan escape \e[31m, diakhiri dengan salah satu \e[0matau \e[30mpada baris yang sama, dan tidak mengandung urutan escape yang tertanam.
grep -Eo $'\e\\[31m[^\e]*\e\\[[03]?m'
awkCuplikan berikut mengekstrak teks merah, meskipun multiline.
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'
Berikut adalah variasi yang mempertahankan perintah pengubah warna, yang bisa berguna jika Anda memfilter banyak warna (di sini merah dan magenta).
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? Maksudku, benda merah tidak hilang jika kau2>/dev/null, kan?