Поиск шаблона строки

Поиск шаблона строки

Я новичок в Linux. Хочу устроиться системным администратором. Я был на собеседовании в Amazon. Меня попросили написать cmd для поиска строки, которая начинается с «s» и заканчивается на «a» в файле. Я знаю, что нам нужно использовать grep, но не знаю, как это работает. К тому же они спросили, как работает grep. Может ли кто-нибудь дать краткий ответ на этот вопрос.

заранее спасибо

решение1

grep ищет в именованных входных ФАЙЛАХ (или стандартном вводе, если файлы не названы или если в качестве имени файла указан один дефис-минус (-)) строки, содержащие совпадение с указанным ШАБЛОНОМ. По умолчанию grep выводит соответствующие строки

Команды Grep

Grep и его параметры

-v  =   non-matching lines
-c  =   count of matching  lines
-i  =   Ignore  case
-r  =   Read all  files  under  each  directory
-l  =   list the file which contain the searching keyword
 ^      =       Search the Starting word of a file
.$      =       Search the end word of a file
^$      =       Search the empty lines in a file

Найти все строки, соответствующие определенному ключевому слову в файле.

grep sysadmin /etc/passwd

Дисплей с числами

grep -nv nologin /etc/passwd

Чтобы избежать ключевого слова и поискать другие

grep -v sysadmin /etc/passwd

Чтобы подсчитать, сколько строк соответствуют ключевым словам, которые мы ищем

grep -c sysadmin /etc/passwd

Для поиска текста без учета регистра

grep -i sysadmin /etc/passwd

Поиск текста, соответствующего определенному шаблону, во всех файлах /homeи их подкаталогах и вывод соответствующих строк

grep -ri sysadmin /home/

Поиск текста, соответствующего определенному шаблону, во всех файлах /homeи его подкаталогах и вывод списка файлов, содержащих этот шаблон

grep -ril sysadmin /home/

Для поиска конкретного IP, упомянутого среди многих IP. Гарантирует, -Fчто .соответствуют буквальным .символам, без него они соответствовали бы любому символу.

grep -F "192.168.1.10" /var/log/syslog

Чтобы найти строку, которая начинается сFeb

grep ^Feb /var/log/syslog

Чтобы найти строку, которая заканчивается наqueue

grep queue$ /var/log/mail.log

Подсчитать пустые строки в файле (строки, содержащие пробелы, не будут учитываться)

grep -c ^$ /var/log/mail.log

Поиск строки внутри всех файлов каталога и его подкаталогов.

grep -r "root" .

решение2

Попробуйте эту команду GNU grep с -Pопцией (Perl-regex),

 grep -oP '\bs.*a\b' file

Объяснение:

\b    # Matches the word boundary(ie, match between a word character and a non word character)
s     # Starting character would be a literal s.
.*    # Matches any character zero or more times.
a     # Matches a literal a.
\b    # Matches the word boundary(ie, match between a word character and a non word character)

Связанный контент