字符串模式搜索

字符串模式搜索

我是 Linux 新手。我想被任命为系统管理员。我参加了亚马逊的面试。他们要求我编写一个cmd来查找文件中以“s”开头并以“a”结尾的字符串。我知道我们必须使用 grep,但不知道实际情况。除此之外,他们还询问 grep 是如何工作的。谁能简单地回答一下这个问题。

提前致谢

答案1

grep 搜索命名输入文件(如果没有命名文件,或者如果给出单个连字符减号 (-) 作为文件名,则搜索标准输入)以查找包含与给定 PATTERN 匹配的行。默认情况下,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

-P尝试使用(Perl-regex) 选项的GNU grep 命令,

 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)

相关内容