Как вы соответствуете строке, которая начинается с специального символа с помощью grep?

У меня есть много файлов .txt в моем каталоге, которые содержат строки, начинающиеся с '='

Для ex: a.txt имеет следующую строку (сначала с пробелами)

=putSomething here; 

Как написать grep-запрос, который будет соответствовать указанной выше строке? Я попробовал следующее:

 find . -name "*.txt" | xargs grep -rn "^[=].*$" 

4 Solutions collect form web for “Как вы соответствуете строке, которая начинается с специального символа с помощью grep?”

Возьмем этот образец файла:

 $ cat file.txt =putSomething here; 

Теперь, чтобы найти все такие .txt файлы в текущем каталоге:

 $ grep -n '^[[:space:]]*=' *.txt file.txt:1: =putSomething here; 

Если вы хотите найти все такие .txt файлы в текущем каталоге и во всех его подкаталогах , используйте:

 $ grep -rn '^[[:space:]]*=' --include '*.txt' subdir/another.txt:1: =putSomething here; file.txt:1: =putSomething here; 

Заметки

  1. find и xargs здесь не нужны. С параметром -r grep выполняет рекурсивный поиск по подкаталогам.

  2. --include '*.txt' ограничивает grep файлами, соответствующими glob *.txt .

  3. ^ совпадает в начале строки. [[:space:]]* соответствует нулевому или более пробельному символу. = соответствует знаку равенства. В регулярных выражениях POSIX нет ничего особенного относительно = поэтому его можно рассматривать как любой другой символ.

  4. Завершение регулярного выражения grep с .*$ Не меняет, какие строки совпадают. .*$ совпадает либо с любыми символами, либо без символов. Единственная причина для использования .*$ – изменить то, что выделяет grep как согласованный текст.

Строка, начинающаяся с = переводит в regex ^= .

Затем команда find:

 find . -name "*.txt" | xargs grep '^=' 

Или, лучше (избегайте бесполезного использования xargs ):

 find . -type f -name "*.txt" -exec grep '^[[:space:]]*=' {} + 

(здесь, из-за окончания + , только один grep выполняется для кучи файлов)

Пробовал команду ниже и, похоже, сработал.

 grep -rn '^ *=' **/*txt 

В качестве альтернативы рекурсивным grep и xargs :

 $ find /dir -type f -name "*.txt" -exec grep -q '^[[:space:]]*=' {} ';' -print 

Это будет выглядеть в /dir (и ниже) для всех обычных файлов, имена которых соответствуют данному шаблону. Для каждого такого файла, если grep -q '^[[:space:]]*=' выходит с нулевым статусом выхода (шаблон был сопоставлен где-то в файле), то выводится его имя.

Или, если вы просто хотите увидеть сами линии:

 $ find /dir -type f -name "*.txt" -exec grep '^[[:space:]]*=' {} '+' 

+ В конце будет подавать как можно больше имен файлов для каждого вызова в grep при использовании ; так как в моем первом примере будет подаваться только один файл за раз.

  • Список перекрывающих экземпляров шаблона
  • Выход справки Grep
  • Как мне искать файл для строки, а затем использовать его как переменную?
  • Поиск нескольких вхождений определенного символа в tcsh
  • Сравнение первого столбца в разных файлах
  • Как «grep» для длины строки * not * в заданном диапазоне?
  • неточный текстовый поиск
  • Как grep для текста в файле и отображать абзац с текстом?
  • Есть ли способ сгладить папку и показать все строки, содержащие символы не-ascii?
  • Почему grep не показывает мне подходящее слово до следующего пробела?
  • Какие специальные символы выполняет синтаксический анализ grep по умолчанию?
  • Interesting Posts

    Как я могу добавить пробел автоматически после каждой команды, которую я вводил в bash?

    Как проверить групповые разрешения файла

    btrfs как перемещать подтолкнуть на другой диск

    Не удается установить второй жесткий диск 1 ТБ в Linux, отлично работает в Windows 8.1

    Настройка разрешения по умолчанию и глубины цвета для RealVNC vncserver-x11?

    Проблемы с колесиком мыши

    Настройте wget, чтобы не сбрасывать хорошие данные с пустыми данными

    Унисон и расширенные атрибуты файлов

    команда –help vs man command

    root не может отправить почту (apticron), но пользователь может (mail / mailx)

    Как показывать строки после каждого совпадения grep до другого конкретного совпадения?

    Как изменить максимальное число PID ядра?

    скрипт ssh для входа на сервер и пароль пользователя root

    Ошибка мыши-площадки после установки нового ядра Linux

    cp с единственным аргументом, содержащим подстановочные знаки

    Linux и Unix - лучшая ОС в мире.