Я новичок в 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)