Ограничить вывод grep на короткие строки

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

Установите необходимые пакеты и добавьте их в .gnomerc:

# To get tearing-free video in Firefox
hsetroot -solid '#000000'
compton --backend glx &             # Worked for me in Ubuntu 16.04
compton --backend xr_glx_hybrid &   # Works for me in Ubuntu 18.04

Строка hsetroot необходима, если compositor [ ! d1].

Моя настройка: Программное обеспечение: Ubuntu 16.04.4 LTS, Firefox 59.0.1, Sawfish 1.11 и Compton 0.1 ~ beta2. Графика: RADEON(0): Chipset: "CAICOS" (ChipID = 0x6779)

Тесты на разрыв:

4k vsync test 60fps tearing test @ 29.97 fps (1080p) Веб-браузер «Тест синхронизации VSYNC»

Дополнительная информация :

4k vsync test 60fps 4k vsync test 60fps tearing test @ 29.97 fps (1080p)

24] Некоторые связанные вопросы:

4k vsync test 60fps tearing test @ 29.97 fps (1080p)

6
задан 18 April 2018 в 11:25

6 ответов

grep имеет только параметры для контекста, основанного на строках. Альтернативный вариант этого сообщения SU:

Обходной путь заключается в том, чтобы включить опцию «только совпадение», а затем использовать силу RegExp для grep немного больше, чем ваш текст:
grep -o ".\{0,50\}WHAT_I_M_SEARCHING.\{0,50\}" ./filepath
Конечно, если вы используете подсветку цвета, вы можете всегда снова grep только окрасить реальное соответствие:
grep -o ".\{0,50\}WHAT_I_M_SEARCHING.\{0,50\}"  ./filepath | grep "WHAT_I_M_SEARCHING"

В качестве другой альтернативы я бы предложил этот SU post текст, а затем grepping, например:

fold -sw 80 input.txt | grep ...

Опция -s сделает fold нажатие слов на следующую строку, а не на разрыв.

Или используйте другой способ для разделения ввода в строках на основе структуры вашего ввода. (Например, сообщение SU обрабатывалось JSON, поэтому использование jq и т. Д. Для печати и grep ... или просто использование jq для самостоятельной фильтрации ... было бы лучше, чем либо из двух приведенных выше альтернатив.)

Этот метод GNU awk может быть быстрее:

gawk -v n=50 -v RS='MyClassName' '
  FNR > 1 { printf "%s: %s\n",FILENAME, p prt substr($0, 0, n)}
  {p = substr($0, length - n); prt = RT}
' input.txt
Скажите awk, чтобы разделить записи по шаблону, (-v RS=...) и количество символов в контексте (-v n=...) Каждая запись после первой записи (FNR > 1) является той, где awk нашел совпадение для шаблона. Поэтому мы печатаем завершающие символы n из предыдущей строки (p) и n ведущих символов из текущей строки (substr($0, 0, n)) вместе с совпадающим текстом для предыдущей строки (которая является prt), мы установите p и prt после печати, поэтому значение, которое мы установили, используется следующей строкой RT, является GNUism, поэтому это GNU awk-specific.

Для рекурсивного поиска возможно:

find . -type f -exec gawk -v n=50 -v RS='MyClassName' 'FNR>1{printf "%s: %s\n",FILENAME, p prt substr($0, 0, n)} {p = substr($0, length-n); prt = RT}' {} +
14
ответ дан 22 May 2018 в 11:22
  • 1
    Хорошо, это работает. Кажется, Regex - это действительный подход, поэтому спасибо за это. Время обработки довольно велико. Без Regex, как и в моем предыдущем сообщении, он занимает 4.912 с, а с Regex, как и в вашем сообщении, требуется 3m39.312s. – Socrates 18 April 2018 в 11:55
  • 2
    @Socrates посмотреть, если метод awk, который я добавил выше, работает лучше – muru 18 April 2018 в 13:43
  • 3
    Метод fold можно использовать, только если вы уверены, что искомая строка не отображается на границе, иначе она будет скрыта grep. – Melebius 18 April 2018 в 13:45
  • 4
    @muru Спасибо за ваше предложение с помощью gawk. К сожалению, предлагаемая команда с find выводит случайные данные и имена файлов, когда они выполняются в моей системе. Кроме того, я недостаточно хорошо разбираюсь в awk, чтобы правильно проанализировать команду. В настоящее время Regex в сочетании с grep решает проблему, возможно, не быстро, но надежно. Опять же, большое спасибо. – Socrates 18 April 2018 в 15:30
  • 5
    @Socrates Я думаю, мне удалось исправить команду awk. Моя ментальная модель ошибалась в отношении того, какие строки RT и префикс и т. Д. Должны были использоваться. – muru 18 April 2018 в 16:33

grep имеет только параметры для контекста, основанного на строках. Альтернативный вариант этого сообщения SU:

Обходной путь заключается в том, чтобы включить опцию «только совпадение», а затем использовать силу RegExp для grep немного больше, чем ваш текст: grep -o ".\{0,50\}WHAT_I_M_SEARCHING.\{0,50\}" ./filepath Конечно, если вы используете подсветку цвета, вы можете всегда снова grep только окрасить реальное соответствие: grep -o ".\{0,50\}WHAT_I_M_SEARCHING.\{0,50\}" ./filepath | grep "WHAT_I_M_SEARCHING"

В качестве другой альтернативы я бы предложил этот SU post текст, а затем grepping, например:

fold -sw 80 input.txt | grep ...

Опция -s сделает fold нажатие слов на следующую строку, а не на разрыв.

Или используйте другой способ для разделения ввода в строках на основе структуры вашего ввода. (Например, сообщение SU обрабатывалось JSON, поэтому использование jq и т. Д. Для печати и grep ... или просто использование jq для самостоятельной фильтрации ... было бы лучше, чем либо из двух приведенных выше альтернатив.)

Этот метод GNU awk может быть быстрее:

gawk -v n=50 -v RS='MyClassName' ' FNR > 1 { printf "%s: %s\n",FILENAME, p prt substr($0, 0, n)} {p = substr($0, length - n); prt = RT} ' input.txt Скажите awk, чтобы разделить записи по шаблону, (-v RS=...) и количество символов в контексте (-v n=...) Каждая запись после первой записи (FNR > 1) является той, где awk нашел совпадение для шаблона. Поэтому мы печатаем завершающие символы n из предыдущей строки (p) и n ведущих символов из текущей строки (substr($0, 0, n)) вместе с совпадающим текстом для предыдущей строки (которая является prt), мы установите p и prt после печати, поэтому значение, которое мы установили, используется следующей строкой RT, является GNUism, поэтому это GNU awk-specific.

Для рекурсивного поиска возможно:

find . -type f -exec gawk -v n=50 -v RS='MyClassName' 'FNR>1{printf "%s: %s\n",FILENAME, p prt substr($0, 0, n)} {p = substr($0, length-n); prt = RT}' {} +
14
ответ дан 17 July 2018 в 16:36

grep имеет только параметры для контекста, основанного на строках. Альтернативный вариант этого сообщения SU:

Обходной путь заключается в том, чтобы включить опцию «только совпадение», а затем использовать силу RegExp для grep немного больше, чем ваш текст: grep -o ".\{0,50\}WHAT_I_M_SEARCHING.\{0,50\}" ./filepath Конечно, если вы используете подсветку цвета, вы можете всегда снова grep только окрасить реальное соответствие: grep -o ".\{0,50\}WHAT_I_M_SEARCHING.\{0,50\}" ./filepath | grep "WHAT_I_M_SEARCHING"

В качестве другой альтернативы я бы предложил этот SU post текст, а затем grepping, например:

fold -sw 80 input.txt | grep ...

Опция -s сделает fold нажатие слов на следующую строку, а не на разрыв.

Или используйте другой способ для разделения ввода в строках на основе структуры вашего ввода. (Например, сообщение SU обрабатывалось JSON, поэтому использование jq и т. Д. Для печати и grep ... или просто использование jq для самостоятельной фильтрации ... было бы лучше, чем либо из двух приведенных выше альтернатив.)

Этот метод GNU awk может быть быстрее:

gawk -v n=50 -v RS='MyClassName' ' FNR > 1 { printf "%s: %s\n",FILENAME, p prt substr($0, 0, n)} {p = substr($0, length - n); prt = RT} ' input.txt Скажите awk, чтобы разделить записи по шаблону, (-v RS=...) и количество символов в контексте (-v n=...) Каждая запись после первой записи (FNR > 1) является той, где awk нашел совпадение для шаблона. Поэтому мы печатаем завершающие символы n из предыдущей строки (p) и n ведущих символов из текущей строки (substr($0, 0, n)) вместе с совпадающим текстом для предыдущей строки (которая является prt), мы установите p и prt после печати, поэтому значение, которое мы установили, используется следующей строкой RT, является GNUism, поэтому это GNU awk-specific.

Для рекурсивного поиска возможно:

find . -type f -exec gawk -v n=50 -v RS='MyClassName' 'FNR>1{printf "%s: %s\n",FILENAME, p prt substr($0, 0, n)} {p = substr($0, length-n); prt = RT}' {} +
14
ответ дан 23 July 2018 в 17:28

Использование единственного соответствия в сочетании с некоторыми другими параметрами (см. ниже) может быть очень близким к тому, что вы ищете, без накладных расходов на обработку regex, упомянутых в другом ответе

grep -RnHo 'MyClassName'
n числовой вывод, показать номер строки совпадения H filename, показать имя файла в начале строки совпадения o только совпадения, показать только строку со строкой, а не всю строку
1
ответ дан 22 May 2018 в 11:22
  • 1
    Хотя верно, что результат найден намного быстрее, отсутствует информация. Отображается путь к файлу, отображается номер строки, но вывод текста - это только мой первоначальный поиск MyClassName. Следовательно, контекст отсутствует. – Socrates 18 April 2018 в 12:36
  • 2
    grep -RnHo "MyClassName" и grep -Rno "MyClassName" имеют одинаковый выход. – Socrates 18 April 2018 в 12:37
  • 3
    Выход @Socrates не совпадает с H в том же каталоге – Robert Riedl 18 April 2018 в 12:44
  • 4
    Флаг -o может быть интересен, если регулярное выражение имеет некоторую переменную часть. Для фиксированной строки бесполезно печатать ее каждый раз. ОП, скорее всего, интересуется ближайшим контекстом. – Melebius 18 April 2018 в 12:54
  • 5
    @Socrates, true - контекст отсутствует, но я думал, что в этом смысл? Ограничить выход? Вы можете добавить контекст снова, добавив строки до (-B 1) или после (-A 1). Извините, что я не мог больше помочь. – Robert Riedl 18 April 2018 в 13:52

Использование единственного соответствия в сочетании с некоторыми другими параметрами (см. ниже) может быть очень близким к тому, что вы ищете, без накладных расходов на обработку regex, упомянутых в другом ответе

grep -RnHo 'MyClassName' n числовой вывод, показать номер строки совпадения H filename, показать имя файла в начале строки совпадения o только совпадения, показать только строку со строкой, а не всю строку
1
ответ дан 17 July 2018 в 16:36

Использование единственного соответствия в сочетании с некоторыми другими параметрами (см. ниже) может быть очень близким к тому, что вы ищете, без накладных расходов на обработку regex, упомянутых в другом ответе

grep -RnHo 'MyClassName' n числовой вывод, показать номер строки совпадения H filename, показать имя файла в начале строки совпадения o только совпадения, показать только строку со строкой, а не всю строку
1
ответ дан 23 July 2018 в 17:28
  • 1
    Хотя верно, что результат найден намного быстрее, отсутствует информация. Отображается путь к файлу, отображается номер строки, но вывод текста - это только мой первоначальный поиск MyClassName. Следовательно, контекст отсутствует. – Socrates 18 April 2018 в 12:36
  • 2
    grep -RnHo "MyClassName" и grep -Rno "MyClassName" имеют одинаковый выход. – Socrates 18 April 2018 в 12:37
  • 3
    Выход @Socrates не совпадает с H в том же каталоге – Robert Riedl 18 April 2018 в 12:44
  • 4
    Флаг -o может быть интересен, если регулярное выражение имеет некоторую переменную часть. Для фиксированной строки бесполезно печатать ее каждый раз. ОП, скорее всего, интересуется ближайшим контекстом. – Melebius 18 April 2018 в 12:54
  • 5
    @Socrates, true - контекст отсутствует, но я думал, что в этом смысл? Ограничить выход? Вы можете добавить контекст снова, добавив строки до (-B 1) или после (-A 1). Извините, что я не мог больше помочь. – Robert Riedl 18 April 2018 в 13:52

Другие вопросы по тегам:

Похожие вопросы: