Использование регулярных выражений с grep
Одна из самых мощных возможностей команды grep
— это возможность использовать регулярные выражения (regex) для сопоставления шаблонов. Регулярные выражения позволяют искать сложные шаблоны, а не только точный текст.
Основные символы регулярных выражений
Вот некоторые общие специальные символы регулярных выражений:
.
(точка): Соответствует любому одиночному символу
^
: Соответствует началу строки
$
: Соответствует концу строки
*
: Соответствует нулю или более вхождений предыдущего символа
[]
: Соответствует любому одному из символов внутри квадратных скобок
[^]
: Соответствует любому символу, не входящему в квадратные скобки
Создадим новый файл с более разнообразным содержимым для практики:
cat > ~/project/grep_lab/regex_practice.txt << EOF
apple
banana
orange
grape
Apple
pineapple
watermelon
123-456-7890
[email protected]
https://www.example.com
The quick brown fox jumps over the lazy dog.
EOF
Соответствие любому символу с помощью точки (.)
Точка (.
) в регулярном выражении соответствует любому одиночному символу:
grep "a..le" ~/project/grep_lab/regex_practice.txt
Это будет соответствовать словам, таким как "apple", где между 'a' и 'le' могут находиться любые два символа:
apple
pineapple
Соответствие началу строки (^)
Кавычка (^
) соответствует шаблонам в начале строки:
grep "^a" ~/project/grep_lab/regex_practice.txt
Это соответствует строкам, начинающимся с буквы 'a':
apple
Соответствие концу строки ($)
Знак доллара ($
) соответствует шаблонам в конце строки:
grep "e$" ~/project/grep_lab/regex_practice.txt
Это соответствует строкам, заканчивающимся на букву 'e':
apple
grape
pineapple
orange
Классы символов с использованием квадратных скобок []
Квадратные скобки позволяют указать набор символов для сопоставления:
grep "[0-9]" ~/project/grep_lab/regex_practice.txt
Это соответствует любой строке, содержащей цифру:
123-456-7890
Вы можете комбинировать классы символов:
grep "[a-zA-Z0-9]" ~/project/grep_lab/regex_practice.txt
Это соответствует любой строке, содержащей алфавитно-цифровые символы (что будет соответствовать всем строкам в нашем файле).
Отрицательные классы символов [^]
Для сопоставления символов, не входящих в набор, используйте [^]
:
grep "^[^aeiou]" ~/project/grep_lab/regex_practice.txt
Это соответствует строкам, начинающимся с символа, который не является гласной:
banana
grape
pineapple
watermelon
123-456-7890
[email protected]
https://www.example.com
The quick brown fox jumps over the lazy dog.
Расширенные регулярные выражения с помощью -E
Для более продвинутых возможностей регулярных выражений используйте опцию -E
(или команду egrep
):
grep -E "(apple|grape)" ~/project/grep_lab/regex_practice.txt
Это соответствует строкам, содержащим либо "apple", либо "grape":
apple
grape
pineapple
Попробуйте экспериментировать с разными регулярными выражениями, чтобы стать более уверенным в сопоставлении шаблонов. Регулярные выражения — это навык, который развивается с практикой!