Pertanyaan lain dengan jawaban yang sama: bagaimana Anda bisa mengembalikan keluaran berwarna ke grep dalam fungsi bash?
Camille Goudeseune
Jawaban:
23
Gunakan --color=always.
grepmendeteksi apakah output ke pipa (atau file). Anda paling tidak pernah menginginkan warna saat output diarsipkan - karena itu adalah sekuens melarikan diri untuk terminal. Khas:
foo ^[[01;31m^[[Kbar^[[m^[[K
dari eg:
grep pattern file > result
Untuk mengganti penggunaan --color=always.
grep --color=always pattern file |...
Contoh:
Memiliki file:
ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz
Kemudian
grep --color=always ID file | grep --color=always 2013| grep foo
akan berwarna ID, 2013dan foo.
grep --color=always ID file | grep 2013| grep foo
akan mewarnai IDdan foo, tetapi tidak 2013.
1 Penting: Anda juga harus ingat bahwa kekacauan yang ditambahkandari warna diteruskan ke perintah berikutnya dalam rantai. Setelah ID berwarna, Anda tidak bisa (dengan mudah), cocok dengan misID=111.
Pada beberapa kesempatan seseorang mungkin ingin warna terminal dalam file . Coba misalnya
grep --color=always foo file > result
cat result
Padahal file yang dihasilkan akan memiliki portabilitas yang sangat terbatas.
Pewarnaan itu sendiri juga merupakan perpanjangan.
Seperti disebutkan oleh @slm yang baik , Anda dapat menambahkan:
export GREP_OPTIONS="--color=always"
.bashrcdll Anda , tetapi jangan kecuali Anda karena alasan tertentu benar-benar memahami implikasi dan masih ingin melakukannya. Dalam banyak hal akan pecah grepkarena fakta yang disebutkan di atas 1 .
Tambahkan aliasjika Anda sering menggunakannya.
alias cgrep='grep --color=always'
GREP_OPTIONSdan --colormengambil tiga pilihan : never, autodan always. Dua yang pertama harus menjadi satu-satunya yang dipertimbangkan GREP_OPTIONS.
Anda juga dapat memeriksa GREP_COLORSdi manhalaman atau di gnu grep .
tambahkan ini ke jawabannya juga: export GREP_OPTIONS="--color=always"di .bashrc menjadikan opsi sebagai default untuk greps apa pun, dan Anda telah berhasil melakukannya!
"grep mendeteksi jika output ke pipa" - aha! Ini kuncinya, grep tidak mewarnai jika itu bagian dari pipa. Seharusnya ada prinsip substitusi terhadap hal semacam ini: - /
Chris2048
@ Chris2048: Ini adalah standar untuk sebagian besar alat mencetak warna ke terminal. Anda mungkin menemukan beberapa detail dengan ini , tentang bagaimana terdeteksi, Dan ini menunjukkan beberapa masalah dengan misalnya ls dan warna pada OSX asli lsdan gnu coreutils.
Jawaban:
Gunakan
--color=always
.grep
mendeteksi apakah output ke pipa (atau file). Anda paling tidak pernah menginginkan warna saat output diarsipkan - karena itu adalah sekuens melarikan diri untuk terminal. Khas:dari eg:
Untuk mengganti penggunaan
--color=always
.Contoh:
Memiliki file:
Kemudian
akan berwarna
ID
,2013
danfoo
.akan mewarnai
ID
danfoo
, tetapi tidak2013
.1 Penting: Anda juga harus ingat bahwa kekacauan yang ditambahkandari warna diteruskan ke perintah berikutnya dalam rantai. Setelah ID berwarna, Anda tidak bisa (dengan mudah), cocok dengan mis
ID=111
.Pada beberapa kesempatan seseorang mungkin ingin warna terminal dalam file . Coba misalnya
Padahal file yang dihasilkan akan memiliki portabilitas yang sangat terbatas.
Pewarnaan itu sendiri juga merupakan perpanjangan.
Seperti disebutkan oleh @slm yang baik , Anda dapat menambahkan:
.bashrc
dll Anda , tetapi jangan kecuali Anda karena alasan tertentu benar-benar memahami implikasi dan masih ingin melakukannya. Dalam banyak hal akan pecahgrep
karena fakta yang disebutkan di atas 1 .Tambahkan
alias
jika Anda sering menggunakannya.GREP_OPTIONS
dan--color
mengambil tiga pilihan :never
,auto
danalways
. Dua yang pertama harus menjadi satu-satunya yang dipertimbangkanGREP_OPTIONS
.Anda juga dapat memeriksa
GREP_COLORS
diman
halaman atau di gnu grep .sumber
export GREP_OPTIONS="--color=always"
di .bashrc menjadikan opsi sebagai default untuk greps apa pun, dan Anda telah berhasil melakukannya!ls
dan gnu coreutils.