Як я можу зберігати кольорові коди за допомогою введення грепа?


15

Якщо я використовую дві послідовні grepкоманди, наприклад:

echo "foo bar" | grep foo | grep bar

Тоді перший візерунок ("foo") не виділяється. Насправді, схоже, що grep видаляє кольорові коди зі свого введення. Чи є спосіб запобігти цьому?


Ще одне запитання з тією ж відповіддю: як можна відновити кольоровий вихід у греп у межах функції bash?
Camille Goudeseune

Відповіді:


23

Використовуйте --color=always.

grepвизначає, чи є вихід на трубу (або файл). Вам більше ніколи не потрібні кольори, коли виводиться файл - як це послідовності виходу терміналу. Зазвичай:

foo ^[[01;31m^[[Kbar^[[m^[[K

наприклад:

grep pattern file > result

Щоб перекрити використання --color=always.

grep --color=always pattern file | ...

Приклад:

Маючи файл:

ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz

Потім

grep --color=always ID file | grep --color=always 2013 | grep foo

забарвив би ID, 2013і foo.

grep --color=always ID file | grep 2013 | grep foo

забарвив би IDі foo, але ні 2013.

1 Важливо: Ви також повинні пам’ятати, що доданий безлад з кольорів передається наступній команді ланцюга. Післяяк ID забарвлена, ви не можете (легко), збігаютьсянаприкладID=111.


Іноді, можливо, захочеться термінальних кольорів у файлі . Спробуйте, наприклад

 grep --color=always foo file > result
 cat result

Хоча отриманий файл мав би дуже обмежену портативність.


Сама забарвлення - це також продовження.


Як згадує хороший @slm , ви можете додати:

export GREP_OPTIONS="--color=always"

вашому .bashrcі т. д., але, якщо ви з якоїсь причини дійсно не розумієте наслідки і все ще хочете це зробити. Це багато в чому зламається grepчерез згаданий вище факт 1 .

Додайте, aliasякщо ви використовуєте його часто.

 alias cgrep='grep --color=always'

GREP_OPTIONSі --color прийняти три варіанти : never, autoі always. Дві перші повинні бути єдиними, що розглядаються GREP_OPTIONS.

Ви також можете перевірити GREP_COLORSна manсторінках або в gnu grep .


Додаткові відомості про плюси та мінуси методів тут: stackoverflow.com/questions/867877/…
slm

1
додайте це і до відповіді: export GREP_OPTIONS="--color=always"у .bashrc робить параметри за замовчуванням для будь-яких грепів, і ви їх майже прибили!
slm

Хороші речі в цьому питаннях Super Uuser Q&A: superuser.com/questions/36022/…
slm

"grep визначає, чи є вихід на трубу" - ага! Це ключ, греп не забарвлюється, якщо це частина труби. Проти подібних речей має бути принцип заміни: - /
Chris2048

@ Chris2048: Це стандарт для більшості інструментів друку кольорів на термінал. Ви можете знайти більш детально на цьому , про те , як воно було виявлено, і це показують деякі проблеми, наприклад , шляхом Лс квітів на OSX рідних lsі гну Coreutils.
Руніум
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.