grep 命令的常用技巧
如果在
公众号
文章发现状态为
已更新
, 建议点击
查看原文
查看最新内容。
状态:
未更新
原文链接:
https://typonotes.com/posts/2023/03/27/linux-command-grep/
在Linux和Unix操作系统中,grep是一种在文本文件中搜索字符串的命令行工具。以下是grep命令的一些常用技巧:
-
基本用法
:在命令行中输入
grep 关键词 文件名
即可搜索包含该关键词的行。例如:
grep hello myfile.txt
-
忽略大小写
:使用
-i
选项可以忽略大小写,这样搜索时不区分大小写。例如:
grep -i hello myfile.txt
-
显示行号
:使用
-n
选项可以显示匹配行的行号。例如:
grep -n hello myfile.txt
-
显示匹配行之前/之后的行数
:使用
-A
和
-B
选项可以分别显示匹配行之后和匹配行之前的指定行数。例如:
grep -A 2 hello myfile.txt
grep -B 1 hello myfile.txt
-
显示匹配行周围的行数
:使用
-C
选项可以同时显示匹配行之前和之后的指定行数。例如:
grep -C 1 hello myfile.txt
-
排除匹配的行
:使用
-v
选项可以排除匹配的行。例如:
grep -v hello myfile.txt
-
限制边界搜索
:使用
-w
选项可以限制搜索的单词边界。例如:
grep -w hello myfile.txt
在这个例子中,如果我们使用
grep hello myfile.txt
,那么搜索结果将包含包含
hello
子字符串的行,例如
hello world
、
helloworld
等。但是,如果我们使用
grep -w hello myfile.txt
,那么搜索结果将仅包含包含单词
hello
的行,例如
hello world
,而不包括
helloworld
。
grep 使用 Perl 正则表达式
使用
-P
选项可以让grep使用Perl正则表达式而不是基本的正则表达式。Perl正则表达式更强大,可以支持更多的特性,例如非贪婪匹配和后向引用。例如:
grep -P '\d{3}-\d{2}-\d{4}' myfile.txt
这个例子使用了Perl正则表达式,在文本文件中搜索包含美国社会保险号码的行。正则表达式
\d{3}-\d{2}-\d{4}
表示一个三位数,一个短横线,两个两位数和一个短横线,组成了一个美国社会保险号码的格式。
以下是一些常用的Perl正则表达式案例:
-
匹配任何字符:
.
(句点)代表任何字符。例如,
grep -P 'a.c' myfile.txt
将匹配任何包含"a"、“c"之间任意一个字符的行。
-
匹配数字:
\d
代表任何数字字符。例如,
grep -P '\d+' myfile.txt
将匹配任何包含一个或多个数字的行。
-
匹配字母:
\w
代表任何字母字符(包括数字和下划线)。例如,
grep -P '\w+' myfile.txt
将匹配任何包含一个或多个字母字符的行。
-
匹配空白字符:
\s
代表任何空格字符(包括空格、制表符和换行符)。例如,
grep -P '\s+' myfile.txt
将匹配任何包含一个或多个空格字符的行。
-
匹配行首和行尾:
^
代表行首,
$
代表行尾。例如,
grep -P '^hello' myfile.txt
将匹配任何以"hello"开头的行,而
grep -P 'world$' myfile.txt
将匹配任何以"world"结尾的行。
-
匹配重复字符:
+
代表一个或多个重复字符,``代表零个或多个重复字符,
?
代表零个或一个重复字符。例如,
grep -P 'bo+s' myfile.txt
将匹配任何包含"bos”、“boos”、“boooos"等的行,而
grep -P 'colou?r' myfile.txt
将匹配任何包含"color"或"colour"的行。
-
匹配字符集合:
[]
代表一个字符集合。例如,
grep -P '[aeiou]' myfile.txt
将匹配任何包含元音字母的行,而
grep -P '[^aeiou]' myfile.txt
将匹配任何不包含元音字母的行。
-
匹配特定次数的字符:
{n}
表示匹配n个重复字符,
{n,}
表示匹配n个或更多重复字符,
{n,m}
表示匹配n到m个重复字符。例如,
grep -P 'o{2}' myfile.txt
将匹配任何包含两个连续的"o"的行,而
grep -P 'o{2,}' myfile.txt
将匹配任何包含两个或更多连续的"o"的行。
匹配字母:
\w
代表任何字母字符(
Grep 使用 Perl 正则表达式案例:
-
匹配任何字符:
.
(句点)代表任何字符。例如,
grep -P 'a.c' myfile.txt
将匹配任何包含"a”、“c"之间任意一个字符的行。
-
匹配数字:
\d
代表任何数字字符。例如,
grep -P '\d+' myfile.txt
将匹配任何包含一个或多个数字的行。
-
匹配字母:
\w
代表任何字母字符(包括数字和下划线)。例如,
grep -P '\w+' myfile.txt
将匹配任何包含一个或多个字母字符的行。
-
匹配空白字符:
\s
代表任何空格字符(包括空格、制表符和换行符)。例如,
grep -P '\s+' myfile.txt
将匹配任何包含一个或多个空格字符的行。
-
匹配行首和行尾:
^
代表行首,
$
代表行尾。例如,
grep -P '^hello' myfile.txt
将匹配任何以"hello"开头的行,而
grep -P 'world$' myfile.txt
将匹配任何以"world"结尾的行。
-
匹配重复字符:
+
代表一个或多个重复字符,``代表零个或多个重复字符,
?
代表零个或一个重复字符。例如,
grep -P 'bo+s' myfile.txt
将匹配任何包含"bos”、“boos”、“boooos"等的行,而
grep -P 'colou?r' myfile.txt
将匹配任何包含"color"或"colour"的行。
-
匹配字符集合:
[]
代表一个字符集合。例如,
grep -P '[aeiou]' myfile.txt
将匹配任何包含元音字母的行,而
grep -P '[^aeiou]' myfile.txt
将匹配任何不包含元音字母的行。
-
匹配特定次数的字符:
{n}
表示匹配n个重复字符,
{n,}
表示匹配n个或更多重复字符,
{n,m}
表示匹配n到m个重复字符。例如,
grep -P 'o{2}' myfile.txt
将匹配任何包含两个连续的"o"的行,而
grep -P 'o{2,}' myfile.txt
将匹配任何包含两个或更多连续的"o"的行。
grep 在 shell 中的条件判断
grep
的搜索结果, 找到就是
成功
, 没找到就是
失败
, 因此可以直接使用其作为条件语句。
通常, 在使用
if
条件判断的时候, 会使用变量
$RET
捕捉执行结果, 并对
$RET
的值进行判断。
1
|
#!/bin/bash
grep abc 111.txt > /dev/null
RET=$?
if [[ $RET == 0 ]]; then
echo "found"
echo "not found"
|
在
bash
中, 可以直接使用
逻辑
表达式, 整个结构看起来更简单。
1
|
#!/bin/bash
grep abc 111.txt > /dev/null && {
echo "found"
} || {
echo "not found"
|