Intereting Posts
Удаленное управление машиной Ubuntu с компьютера Windows Фильтр Rsync: копирование только одного шаблона Какова дополнительная команда для «rx» для передачи xmodem? Строка состояния экрана несколько строк Не удалось подключить root fs через NFS Как переопределить исходный код в сценарии оболочки Linux? Параметры команды с дефис или нет Фоновый процесс сбора информации о окне с некоторой задержкой, как управлять им? Где во время загрузки загружаются возможности Почему я не могу избежать пробелов в сценарии bash? Конфигурация для обнаружения уже запущенного xsession или только автозапуска в один раз Каковы сочетания клавиш для командной строки? Копирование большого количества файлов рекурсивно приводит к проблемам с нагревом на моем внешнем жестком диске С помощью Irssi вы можете / rmreconns прервать тайм-ауты. Есть ли команда, чтобы заставить его снова подключиться * сейчас *? Корреляция / var / log / * timestamps

grep, как подавить отображение несогласованного файла?

Я пытаюсь найти файлы, содержащие определенное слово, используя grep . В каталоге есть много файлов (> 500)

Команда, которую я запускаю

 $ grep 'delete' * 

Вывод

 validate_data_stage1:0 validate_data_stage2:0 validate_data_stage3:0 validate_data_stage4:0 validate_data_stage5:0 validate_input_stage1:0 validate_input_stage2:0 validate_input_stage3:0 validate_input_stage4:0 .... and hundred of such lines 

Это файлы, которые не содержат заданного совпадения. Я хочу, чтобы эти строки отображались в stdout. Я знаю ключ -q , но это будет подавлять полный вывод, чего я не хочу.

Как мне это сделать?

Это поведение, проявляемое grep -c .

Вероятно, у вас есть файл, имя которого начинается с - и содержит символ c и вы используете GNU grep без установки переменной среды POSIXLY_CORRECT .

Использование:

 grep -- delete * 

или лучше:

 grep delete ./* 

-- отмечает конец опций, так что это имя файла не будет считаться опцией (с помощью POSIX grep, это было бы не так, поскольку аргумент delete без опции означал бы конец опций), но он не будет обращаться проблема файла, называемого - . grep delete ./* более надежный, но имеет недостаток вывода дополнительного ./ для сопоставления файлов (хотя это может считаться бонусом, поскольку это помогает идентифицировать имена файлов, содержащие символы новой строки).

Используя grep -l вы получите только файлы, содержащие хотя бы одно совпадение.

Вам нужна информация о том, сколько совпадений есть в файле? Потому что вы можете пропустить с помощью -c который используется для подсчета количества совпадений в файле.

edit: И как чернокнижник сказал, что использование -I для подавления матчей в двоичных файлах также может быть хорошей идеей.

Добавить

 | grep -v ':0$' 

Не очень изящно, но я думаю, что это сработает.

Добавление -l в вашу команду даст вам только совпадения, но также будет подавлять количество копий совпадений для каждого файла.