Escaping * с регулярными выражениями и Grep

У меня есть файл, который имеет уникальные строки, начинающиеся с 2 звезд (**).

Однако, когда я запускаю команду grep для

grep \*\* fileName 

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

Как мне избежать ** для правильных строк, которые нужно найти?

3 Solutions collect form web for “Escaping * с регулярными выражениями и Grep”

Поэтому постарайтесь :

 egrep "^\*\*" YOUR_FILE 

Не забудьте использовать двойную кавычку.

Примечание. Используйте egrep вместо grep .

Вы также можете добиться того же, grep что строка, которую она должна соответствовать, является фиксированной строкой. Переключателем для этого является -F или --fixed-strings .

 -F, --fixed-strings Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.) 

Итак, что-то вроде этого будет делать это:

 $ grep -F "**" somefile.txt 

пример

 $ cat somefile.txt ** blah blahblah ** hi 

В Grepping файл создается следующее:

 $ grep -F "**" somefile.txt ** blah ** hi 

В:

 grep \*\* fileName 

Обратные косые черты используются, чтобы избежать * в оболочке (где * – оператор глобулизации).

В качестве второго аргумента grep получает строку из двух символов: ** .

Как регулярное выражение, это означает любое (0 или более) число звездных символов , поэтому в основном оно совпадает везде, так как оно также соответствует пустой строке, которая объясняет, почему вы получаете все строки файла.

Поскольку * является специальным для grep regex, вам также необходимо убежать от него. Лучше всего использовать одинарные кавычки вместо обратных косых черт для выхода * в оболочку (поскольку одинарные кавычки – это сильные кавычки оболочки, которые упускают каждый символ, но сам символ одиночной кавычки) и используют обратную косую черту для перехода * в grep. Двойные кавычки также будут работать в этом случае, но будьте осторожны, что обратные косые черты по-прежнему являются особенными для оболочки внутри двойных кавычек.

Так:

 grep '\*\*' somefile.txt 

* escaped, так что они больше не являются операторами регулярных выражений, но считаются буквальными символами) возвращают строки somefile.txt которые содержат последовательность из двух звездных символов. Если вы хотите, чтобы их находили только в начале строки, вы должны использовать оператор regex привязки ^ :

 grep '^\*\*' somefile.txt 

Альтернативный способ: * не принимать в качестве оператора регулярных выражений использовать диапазоны символов:

 grep '^[*][*]' somefile.txt 

Альтернативный способ указать двух звездных символов – это написать:

 grep '^\*\{2\}' somefile.txt 

(где \{ – другой оператор регулярных выражений), который легче читать, если вы используете расширенные регулярные выражения, как при передаче опции -E в grep (избегайте egrep поскольку он не является стандартным):

 grep -E '^\*{2}' somefile.txt 

(в расширенных регулярных выражениях, { – оператор регулярных выражений).

  • Сравните и распечатайте данные из разных текстовых файлов на один в Shell
  • Порядок подстановки команды Linux
  • вернуть первый экземпляр символов из списка
  • В чем разница между $. foo 'и' $ ./foo '?
  • Ошибка демона Cron: разрешение отклонено
  • cp, запущенный из результатов кода, не может stat '/ tmp / somedir' работает в оболочке
  • сбой команды ожидания
  • Что такое Linux для $ DECK и $ EOD?
  • Файлы Cat 2 и избегайте дублирования строк
  • Rsync над пользовательской оболочкой с fifo
  • Как использовать grep для извлечения имен файлов в конце строк?
  • Interesting Posts

    Неудовлетворенные зависимости из-за слишком нового установленного пакета

    Команда cat не работает внутри сценария оболочки

    Является ли AMD GPU FirePro достаточной для Linux Matlab и CUDA?

    Не удается установить ПК BSD

    что подразумевается под подключением STDOUT и STDIN?

    Как я могу считать все файлы в моей системе от root?

    оценка команд двойной блокировки в выражении состояния bash

    Как найти все файлы, которые НЕ содержат текстовую строку?

    Как отключить USB-накопитель из скрипта, который находится на USB-накопителе?

    Заявление о ситуации, вложенное в цикл while, вызывает бесконечную петлю в сценарии BASH

    изменить среду работающего процесса

    wget и предотвращение загрузки файлов на рекурсивный wget

    Запуск события, основанного на выводе второй команды

    Что значит ? означает в выражении cron?

    есть ли инструмент аудита для отслеживания инсталляций пакетов и версии ядра

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