我是 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)