Можете ли вы сохранить форматирование непревзойденного контента в grep?

Когда вы используете команду grep дважды, выделяется первое выделение. Насколько я могу судить, это помогает избежать совпадения кодов форматирования. (Для контраста, «ack-grep» будет выделять новые совпадения, сохраняя при этом форматирование в старых совпадениях, пока совпадения не перекрываются, но он с радостью будет соответствовать используемым кодам форматирования.) Я ищу поведение по шаблону. в базовом тексте, как будто форматирования не было, но не за счет удаления форматирования из оригинала для последующего отображения. Это поведение где-то встроено? У меня grep псевдоним --color = always.

Это может быть дубликат Сохранить цвет после передачи grep в grep - однако я также хочу выяснить, почему и как некоторые программы удаляют форматирование, и можно ли его использовать для исправления случайного совпадения escape-кода. (Если эта проблема решена или неразрешима, я с радостью закрою ее.)


person John P    schedule 27.07.2016    source источник


Ответы (1)


По умолчанию в файлах .bashrc ls и grep определены как псевдонимы. Псевдонимы:

ls -> ls --color=auto
grep -> grep --color=auto

Параметр auto означает, что если стандартный вывод - это экран, он будет отображать вывод с цветами, но если вывод перенаправлен в канал или файл, форматирование цвета будет удалено. Когда вы устанавливаете параметр «--color = always», это приводит к форматированию с использованием цвета независимо от того, куда перенаправляется вывод. Вы также можете никогда не использовать форматирование цвета, используя --color=never

Вы можете проверить псевдоним, набрав alias. Вы также можете выполнить простую команду ls или grep (то есть без параметров, заданных псевдонимами), добавив обратную косую черту в начале.

Например, с помощью команды ls:

\ls

Будет отображать вывод на экран без цветов.

person AwkMan    schedule 27.07.2016
comment
Спасибо ... Я не знаю, как получить то поведение, которое я имел в виду, используя эту информацию, но это действительно помогает. Если бы у вас был grep, переданный по конвейеру к чему-то еще, переданному другому grep, только последний grep будет окрашен, потому что первый из них лишился / пропустил цвет при передаче. Как вы думаете, есть ли способ различать цветные и простые версии, работать с простой и снова объединять дельты (escape-коды)? Я знаю, что это больше усилий, чем того стоит без более практичного варианта использования, но я чувствую, что мне не хватает чего-то важного с escape-кодами и редактированием потока. (...) - person John P; 02.08.2016
comment
Может быть, есть лучший способ сопоставления с шаблоном и / или замены печатных символов, игнорируя, но сохраняя непечатаемые символы? - person John P; 02.08.2016