grep 命令:文本搜索
一、grep 命令简介
grep
命令用于在文件中搜索指定模式的文本,并显示匹配的行。
二、grep 命令参数
匹配规则:可以是 普通字符
串或 正则表达式
。
grep [选项] [匹配规则] [指定目录]
常用选项:
-
-i, --ignore-case
:忽略大小写。 -
-v, --invert-match
:仅显示不匹配的行。 -
-c, --count
:仅显示匹配行的计数,而不显示匹配的内容。 -
-n, --line-number
:显示匹配行的行号。 -
-l, --files-with-matches
:仅显示包含匹配内容的文件名。 -
-L, --files-without-match
:仅显示不包含匹配内容的文件名。 -
-r, --recursive
:递归地搜索目录中的文件。 -
-w, --word-regexp
:仅匹配整个单词,而不是部分匹配。 -
-E, --extended-regexp
:使用扩展的正则表达式语法。不支持\d
等快捷写法。 -
-o, --only-matching
:仅显示匹配的部分,而不是整行。 -
-A NUM, --after-context=NUM
:显示匹配行后的 NUM 行内容。 -
-B NUM, --before-context=NUM
:显示匹配行前的 NUM 行内容。 -
-C NUM, --context=NUM
:显示匹配行前后各 NUM 行内容。 -
-q, --quiet, --silent
:静默模式,不显示任何输出。 -
-P, --perl-regexp
:使用 Perl 正则表达式语法。支持\d
等快捷写法,比-E
参数实用。
三、grep 命令示例
示例 1 从一个命令的输出中搜索信息:
示例 2 在文件中搜索包含特定字符串的行:
grep "关键词/匹配规则" filename
示例 3 忽略大小写搜索:
grep -i "关键词/匹配规则" filename
示例 4 显示匹配行的行号:
grep -n "关键词/匹配规则" filename
示例 5 递归搜索目录下的所有文件:
grep -r "关键词/匹配规则" directory
当前目录
grep -r "拼命加载"
# 输出
../Joe/live.php: <li class="error">正在拼命加载中...</li>
../Joe/video.php: <p class="error">正在拼命加载中...</p>
../Joe/video.php: <li class="error">正在拼命加载中...</li>
../Joe/wallpaper.php: <li class="error">正在拼命加载中...</li>
示例 6 显示不匹配的行:
grep -v "关键词/匹配规则" filename
示例 7 显示匹配行的计数:
grep -c "关键词/匹配规则" filename
示例 8 只显示包含匹配的文件名:
grep -l "关键词/匹配规则" *
示例 9 grep 嵌套
这里 timedatectl show
输出的内容非常多,而我只想看日期,可以嵌套使用 grep
提取日期值。
# 命令
timedatectl show
# 输出
Timezone=Etc/UTC
LocalRTC=no
CanNTP=yes
NTP=yes
NTPSynchronized=yes
TimeUSec=Tue 2024-09-17 09:01:41 UTC
RTCTimeUSec=Tue 2024-09-17 09:01:41 UTC
grep
# 命令
timedatectl show | grep "^TimeUSec" | grep -Po "\d{4}-\d{2}-\d{2}"
# 输出
2024-09-17
思考
仅有两个文件,内容一样
搜索
第一个 ls
搜索不到:可将 ls 输出看作临时文件 tmp,tmp 作为搜索内容
第二个 ls
搜索成功:hello.c 和 hello_world.c 作为搜索文件