Якщо я використовую дві послідовні grepкоманди, наприклад:
echo "foo bar" | grep foo | grep bar
Тоді перший візерунок ("foo") не виділяється. Насправді, схоже, що grep видаляє кольорові коди зі свого введення. Чи є спосіб запобігти цьому?
Якщо я використовую дві послідовні grepкоманди, наприклад:
echo "foo bar" | grep foo | grep bar
Тоді перший візерунок ("foo") не виділяється. Насправді, схоже, що grep видаляє кольорові коди зі свого введення. Чи є спосіб запобігти цьому?
Відповіді:
Використовуйте --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 .
export GREP_OPTIONS="--color=always"у .bashrc робить параметри за замовчуванням для будь-яких грепів, і ви їх майже прибили!