前言
grep
(Global Regular Expression Print)是 Linux 和类 Unix 系统中一个非常强大且常用的文本搜索工具,用于在文本中查找匹配指定模式的行,并将匹配的行输出。
应用场景
日志文件分析:在系统日志文件中查找特定的错误信息或事件记录。例如,grep "ERROR" /var/log/syslog
可以在系统日志中查找包含 "ERROR" 的行。
代码搜索:在代码文件中查找特定的函数名、变量名或关键字。例如,grep -r "function_name" /path/to/code
可以在指定的代码目录中查找包含 "function_name" 的行。
数据筛选:从大量文本数据中筛选出符合特定条件的数据。例如,grep "[0-9]{3}-[0-9]{2}-[0-9]{4}" data.txt
可以从 data.txt
文件中筛选出符合美国社会安全号码格式(如 123-45-6789
)的行。
grep [选项] 模式 [文件...] 模式:指的是要查找的字符串或正则表达式。 文件:指定要在哪些文件中进行查找,如果不指定文件,grep 会从标准输入读取数据。 例如,在 test.txt 文件中查找包含 "apple" 的行: grep "apple" test.txt 常用选项 -i:忽略大小写进行匹配。例如,grep -i "apple" test.txt 会查找包含 "apple"、"Apple"、"APPLE" 等的行。 -v:反向匹配,输出不包含指定模式的行。如 grep -v "apple" test.txt 会输出 test.txt 中不包含 "apple" 的行。 -r 或 -R:递归查找,用于在目录及其子目录下的所有文件中进行查找。例如,grep -r "apple" /path/to/directory 会在 /path/to/directory 目录及其子目录下的所有文件中查找包含 "apple" 的行。 -n:显示匹配行的行号。如 grep -n "apple" test.txt 会在输出匹配行的同时显示该行在文件中的行号。 -c:只输出匹配的行数,而不输出具体的匹配内容。例如,grep -c "apple" test.txt 会显示 test.txt 文件中包含 "apple" 的行数。 -C:用于在输出匹配行的同时,额外显示匹配行前后的若干行,帮助你更全面地了解匹配内容的上下文信息。 -w:只匹配完整的单词。例如,grep -w "apple" test.txt 只会匹配 "apple" 作为一个完整单词出现的行,而不会匹配 "applet" 等包含 "apple" 的字符串。 正则表达式支持 grep 支持基本正则表达式(BRE)和扩展正则表达式(ERE),通过 -E 选项可以使用扩展正则表达式。以下是一些常用的正则表达式元字符: .:匹配任意单个字符。例如,grep "a.e" test.txt 会匹配 "abe"、"ace"、"ade" 等字符串。 *:匹配前面的字符零次或多次。例如,grep "ab*c" test.txt 会匹配 "ac"、"abc"、"abbbc" 等字符串。 ^:匹配行的开头。例如,grep "^apple" test.txt 会匹配以 "apple" 开头的行。 $:匹配行的结尾。例如,grep "apple$" test.txt 会匹配以 "apple" 结尾的行。
练习文档
[ldx@VM-20-5-opencloudos ~]$ cat system_log.txt [2024-01-01 10:00:00] INFO: System started successfully. [2024-01-01 10:05:00] WARN: Disk space is low, only 10GB left. [2024-01-01 10:10:00] ERROR: Database connection failed. [2024-01-01 10:15:00] INFO: User "John" logged in. [2024-01-01 10:20:00] DEBUG: Query executed: SELECT * FROM users; [2024-01-01 10:25:00] INFO: Service "WebServer" started. [2024-01-01 10:30:00] WARN: High CPU usage detected, 90%. [2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. [2024-01-01 10:40:00] INFO: User "Alice" logged out. [2024-01-01 10:45:00] DEBUG: Memory allocation: 512MB.
实战练习
#查找所有包含 INFO 级别的日志行 [ldx@VM-20-5-opencloudos ~]$ ls 1a.txt 1.txt 2.txt 3.txt 4.txt 5.txt ABC.txt ab.txt alss remoce.txt sample.txt system_log.txt test test2 testfile x.txt [ldx@VM-20-5-opencloudos ~]$ grep -l INFO ./*. #只打印匹配的文件名 ./system_log.txt [ldx@VM-20-5-opencloudos ~]$ grep INFO ./* ./system_log.txt:[2024-01-01 10:00:00] INFO: System started successfully. ./system_log.txt:[2024-01-01 10:15:00] INFO: User "John" logged in. ./system_log.txt:[2024-01-01 10:25:00] INFO: Service "WebServer" started. ./system_log.txt:[2024-01-01 10:40:00] INFO: User "Alice" logged out. #查找所有不包含 DEBUG 级别的日志行 [ldx@VM-20-5-opencloudos ~]$ vim system_log.txt [ldx@VM-20-5-opencloudos ~]$ cat system_log.txt [2024-01-01 10:00:00] INFO: System started successfully. [2024-01-01 10:05:00] WARN: Disk space is low, only 10GB left. [2024-01-01 10:10:00] ERROR: Database connection failed. [2024-01-01 10:15:00] INFO: User "John" logged in. [2024-01-01 10:20:00] DEBUG: Query executed: SELECT * FROM users; [2024-01-01 10:25:00] INFO: Service "WebServer" started. [2024-01-01 10:30:00] WARN: High CPU usage detected, 90%. [2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. [2024-01-01 10:40:00] INFO: User "Alice" logged out. [2024-01-01 10:45:00] DEBUG: Memory allocation: 512MB. [ldx@VM-20-5-opencloudos ~]$ grep -v 'DEBUG' system_log.txt [2024-01-01 10:00:00] INFO: System started successfully. [2024-01-01 10:05:00] WARN: Disk space is low, only 10GB left. [2024-01-01 10:10:00] ERROR: Database connection failed. [2024-01-01 10:15:00] INFO: User "John" logged in. [2024-01-01 10:25:00] INFO: Service "WebServer" started. [2024-01-01 10:30:00] WARN: High CPU usage detected, 90%. [2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. [2024-01-01 10:40:00] INFO: User "Alice" logged out. #查找包含 ERROR 级别的日志行,并显示行号 [ldx@VM-20-5-opencloudos ~]$ grep -n "ERROR" system_log.txt 3:[2024-01-01 10:10:00] ERROR: Database connection failed. 8:[2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. [ldx@VM-20-5-opencloudos ~]$ grep -n "ERROR" ./* ./system_log.txt:3:[2024-01-01 10:10:00] ERROR: Database connection failed. ./system_log.txt:8:[2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. #递归查找当前目录下所有文件(假设只有 system_log.txt)中包含 User 的行 [ldx@VM-20-5-opencloudos ~]$ grep -r "User" ./* ./system_log.txt:[2024-01-01 10:15:00] INFO: User "John" logged in. ./system_log.txt:[2024-01-01 10:40:00] INFO: User "Alice" logged out. [ldx@VM-20-5-opencloudos ~]$ grep -r "User" . ./.bash_profile:# User specific environment and startup programs ./.bashrc:# User specific environment ./.bashrc:# User specific aliases and functions ./.bash_history:grep -r "User" ./* ./.bash_history:grep -r "User" . ./.bash_history:grep -r "User" ./* grep: ./.ssh/id_rsa: Permission denied ./system_log.txt:[2024-01-01 10:15:00] INFO: User "John" logged in. ./system_log.txt:[2024-01-01 10:40:00] INFO: User "Alice" logged out. #查找作为完整单词出现的 Service 的行 [ldx@VM-20-5-opencloudos ~]$ grep -w "Service" system_log.txt [2024-01-01 10:25:00] INFO: Service "WebServer" started. #统计包含 WARN 级别的日志行数 [ldx@VM-20-5-opencloudos ~]$ grep -c "WARN" system_log.txt 2 [ldx@VM-20-5-opencloudos ~]$ grep "WARN" system_log.txt [2024-01-01 10:05:00] WARN: Disk space is low, only 10GB left. [2024-01-01 10:30:00] WARN: High CPU usage detected, 90%. [ldx@VM-20-5-opencloudos ~]$ grep "WARN" system_log.txt | wc -l 2 #查找以日期开头(格式为 [YYYY-MM-DD)的行 [ldx@VM-20-5-opencloudos ~]$ grep -P "\d{4}-\d{2}-\d{2}" system_log.txt [2024-01-01 10:00:00] INFO: System started successfully. [2024-01-01 10:05:00] WARN: Disk space is low, only 10GB left. [2024-01-01 10:10:00] ERROR: Database connection failed. [2024-01-01 10:15:00] INFO: User "John" logged in. [2024-01-01 10:20:00] DEBUG: Query executed: SELECT * FROM users; [2024-01-01 10:25:00] INFO: Service "WebServer" started. [2024-01-01 10:30:00] WARN: High CPU usage detected, 90%. [2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. [2024-01-01 10:40:00] INFO: User "Alice" logged out. [2024-01-01 10:45:00] DEBUG: Memory allocation: 512MB. [ldx@VM-20-5-opencloudos ~]$ grep -E "^\[[0-9]{4}-[0-9]{2}-[0-9]{2}" system_log.txt [2024-01-01 10:00:00] INFO: System started successfully. [2024-01-01 10:05:00] WARN: Disk space is low, only 10GB left. [2024-01-01 10:10:00] ERROR: Database connection failed. [2024-01-01 10:15:00] INFO: User "John" logged in. [2024-01-01 10:20:00] DEBUG: Query executed: SELECT * FROM users; [2024-01-01 10:25:00] INFO: Service "WebServer" started. [2024-01-01 10:30:00] WARN: High CPU usage detected, 90%. [2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. [2024-01-01 10:40:00] INFO: User "Alice" logged out. [2024-01-01 10:45:00] DEBUG: Memory allocation: 512MB. #查找包含两个连续数字的行(使用扩展正则表达式) [ldx@VM-20-5-opencloudos ~]$ grep -E "[0-9]{2}" system_log.txt [2024-01-01 10:00:00] INFO: System started successfully. [2024-01-01 10:05:00] WARN: Disk space is low, only 10GB left. [2024-01-01 10:10:00] ERROR: Database connection failed. [2024-01-01 10:15:00] INFO: User "John" logged in. [2024-01-01 10:20:00] DEBUG: Query executed: SELECT * FROM users; [2024-01-01 10:25:00] INFO: Service "WebServer" started. [2024-01-01 10:30:00] WARN: High CPU usage detected, 90%. [2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. [2024-01-01 10:40:00] INFO: User "Alice" logged out. [2024-01-01 10:45:00] DEBUG: Memory allocation: 512MB. [ldx@VM-20-5-opencloudos ~]$ grep -P "\d{2}" system_log.txt [2024-01-01 10:00:00] INFO: System started successfully. [2024-01-01 10:05:00] WARN: Disk space is low, only 10GB left. [2024-01-01 10:10:00] ERROR: Database connection failed. [2024-01-01 10:15:00] INFO: User "John" logged in. [2024-01-01 10:20:00] DEBUG: Query executed: SELECT * FROM users; [2024-01-01 10:25:00] INFO: Service "WebServer" started. [2024-01-01 10:30:00] WARN: High CPU usage detected, 90%. [2024-01-01 10:35:00] ERROR: File not found: /var/www/html/index.html. [2024-01-01 10:40:00] INFO: User "Alice" logged out. [2024-01-01 10:45:00] DEBUG: Memory allocation: 512MB.
文章版权声明:除非注明,否则均为柳三千运维录原创文章,转载或复制请以超链接形式并注明出处。