grep和sed精准匹配

本文遵循BY-SA版权协议,转载请附上原文出处链接。


本文作者: 黑伴白

本文链接: http://heibanbai.com.cn/posts/897e3927/

grep和sed精准匹配

grep精准匹配查找

grep常用选项如下:

常用选项
-i:忽略大小写。
-v:反转匹配,显示不包含模式的行。
-r:递归搜索目录下的所有文件。
-n:显示匹配行的行号。
-c:只输出匹配的行数。
-l:显示包含匹配字符串的文件名。
-w:匹配整个单词。
-A:匹配行后面附加显示的行数。
-B:匹配行前面附加显示的行数。
-C:匹配行前后附加显示的行数。

如果要进行精准查询, 用到的选项就是-w, 如下示例:

1
2
3
4
5
6
7
# test.txt文件内容如下
[heibanbai@heibanbai01 tmp]$ cat test.txt
this is a test file, contents:
1. heibanbai
2. hei banbai
3. hei-banbai
4. hei_banbai

查找包含banbai的行:

1
2
3
4
5
6
7
8
9
10
11
# 直接grep查找 结果如下
[heibanbai@heibanbai01 tmp]$ grep "banbai" test.txt
1. heibanbai
2. hei banbai
3. hei-banbai
4. hei_banbai

# 增加 -w 选择进行查找
[heibanbai@heibanbai01 tmp]$ grep -w "banbai" test.txt
2. hei banbai
3. hei-banbai

那么不禁有人会有疑问, 为啥3. hei-banbai会找到? 原因如下:

单词的意思是:只包含大小写字母数字和下划线的字符串。如果某个地方出现了一个不在这个范围内的字符,就意味着到了单词边界

sed精准匹配替换

还是用如上示例文件, 将banbai替换为good

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 普通直接替换
[heibanbai@heibanbai01 tmp]$ sed 's/banbai/good/g' test.txt
this is a test file, contents:
1. heigood
2. hei good
3. hei-good
4. hei_good
# 在要替换的字符串前后加 \<要替换的字符串\>
[heibanbai@heibanbai01 tmp]$ sed 's/\<banbai\>/good/g' test.txt
this is a test file, contents:
1. heibanbai
2. hei good
3. hei-good
4. hei_banbai
# 在要替换的字符串前后加 \b要替换的字符串\b
[heibanbai@heibanbai01 tmp]$ sed 's/\bbanbai\b/good/g' test.txt
this is a test file, contents:
1. heibanbai
2. hei good
3. hei-good
4. hei_banbai

上述 \<\>\b\b的作用是一样的, 就是替换内容的边界限定.


蚂蚁再小也是肉🥩!


grep和sed精准匹配
http://heibanbai.com.cn/posts/897e3927/
作者
黑伴白
发布于
2024年6月6日
许可协议

“您的支持,我的动力!觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付