Почему grep изменяет длину выходных строк?

Я часто использую dpkg или aptitude сочетании с grep когда хочу перечислить некоторые пакеты, доступные или установленные в моей системе, но я заметил, что когда я добавляю | grep | grep , выходные линии выглядят несколько иначе.

Вот чистый вывод dpkg , первая команда была введена, когда терминал был меньше, второй – когда терминал был максимизирован:

экран

Как вы можете видеть, выход отличается в зависимости от размера окна – пространство уменьшается в случае меньшего размера.

Теперь, что происходит, когда мы добавляем | grep | grep :

экран

Часть первого выхода была сброшена во вторую строку. Но когда я максимизировал терминал и набрал команду еще раз, линия находится в одном куске. Более того, столбцы имеют одинаковый фиксированный размер (те же промежутки между ними).

Это выход производительности:

экран

Обе команды были введены в максимально развернутом окне, но строка grep имеет более узкие столбцы, а некоторый текст третьего столбца был отключен.

Почему это происходит? Есть ли способ остановить grep от изменения размеров линий?

Я не знаю, как добавить изображение без изменения его параметров, надеюсь, вы видите, о чем я говорю.

  • Как узнать, в каком пакете установлена ​​символическая ссылка
  • Как возможно, что dpkg не требуется для установки пакетов deb?
  • Как повлиять на порядок обновления пакета (apt-get upgrade / dist-upgrade)
  • После создания предупреждения .deb: dpkg: warning при удалении каталог / usr / local / bin не пуст, поэтому не удаляется
  • Как перечислять в настоящее время не установленные пакеты?
  • Поиск пакетов с установленными старыми конфигурациями и принудительное использование новых конфигураций
  • Получить источники пакетов и ссылку на репозиторий
  • Как проверить, соответствуют ли файлы, установленные пакетом, оригиналам?
  • One Solution collect form web for “Почему grep изменяет длину выходных строк?”

    Это не grep изменяющий выход. Это dpkg и aptitude . Они проверяют, идет ли выход на терминал или на какую-либо другую команду.

    Если это терминал, они адаптируют свою собственную ширину вывода в соответствии с размером терминала.

    Если выход не переходит к терминалу, команда не знает, какой размер столбца будет уместен. (Результат может также завершиться в каком-то файле.)

    То же самое происходит с ls . Сравнить ls и ls|cat .


    Существует нет общего способа решения этой проблемы, но некоторые команды могут иметь определенные варианты для этого. Например aptitude имеет --disable-columns и -w :

      --disable-columns This option causes aptitude search and aptitude versions to output their results without any special formatting. In particular: normally aptitude will add whitespace or truncate search results in an attempt to fit its results into vertical “columns”. With this flag, each line will be formed by replacing any format escapes in the format string with the corresponding text; column widths will be ignored. -w <width>, --width <width> Specify the display width which should be used for output from the search command (by default, the terminal width is used). 

    Страница man dpkg говорит:

      COLUMNS Sets the number of columns dpkg should use when displaying formatted text. Currently only used by -l. 
    Linux и Unix - лучшая ОС в мире.