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

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

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

экран

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

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

экран

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

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

экран

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

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

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

  • debian: удалить или переустановить пакет в очень плохом несогласованном состоянии
  • Не удается установить что-либо
  • Как заставить `dpkg` устанавливать зависимости
  • Отладка dpkg сбой конфигурации с grub
  • debian: удалить все пакеты, установленные в определенный день
  • Как установить пакет «dpkg» из AUR
  • apt-get не будет установлен: dpkg: список файлов для пакета 'gnome-themes-standard-data' не является обычным файлом
  • Почему у Linux так много проблем с зависимостями при установке программного обеспечения, в то время как Windows не только немногие, как VC ++?
  • 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 - лучшая ОС в мире.