Linux 中 sed命令在通配符作为变量匹配时如何作为传统字符串

 

Linux 中 sed命令在通配符作为变量匹配时如何作为传统字符串

 

01、场景

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt
KR24    43.5012 163133
aaak    34.3586 486550
KR.4    26.0377 2063822
RUoi    86.3452 865343
KRG4    25.6799 191071
[root@PC1 test]# a=KR.4                     ## 变量a中包含特殊字符.;而.可以统配任何单个字符
[root@PC1 test]# sed -n "/$a\t/p" a.txt     ## 在利用变量进行匹配时,不能够精匹配
KR24    43.5012 163133
KR.4    26.0377 2063822
KRG4    25.6799 191071

image

。 

 

02、处理方法

[root@PC1 test]# ls
a.txt
[root@PC1 test]# cat a.txt                        ## 测试数据
KR24    43.5012 163133
aaak    34.3586 486550
KR.4    26.0377 2063822
RUoi    86.3452 865343
KRG4    25.6799 191071
[root@PC1 test]# a=KR.4
[root@PC1 test]# echo $a                          ## 输出变量
KR.4
[root@PC1 test]# a_m=$(echo $a | sed 's/[.]/\\&/')    ## 将变量中的特殊字符.替换为\.; 其中\\表示输出一个\;
[root@PC1 test]# echo $a_m                        ## 输出修改后的变量
KR\.4
[root@PC1 test]# sed -n "/^$a_m\t/p" a.txt        ## sed匹配测试,可以正确匹配
KR.4    26.0377 2063822

image

。 

 

003、更通用的方法:

[root@PC1 test]# ls
a.txt
[root@PC1 test]# echo $a
KR.4
[root@PC1 test]# a_modify=$(echo $a | sed 's/[.[\*^$+?{}|()]/\\&/g')        ##  对常见的带有特殊意义的字符都进行转义
[root@PC1 test]# echo $a_modify
KR\.4

image

 。

 

posted @ 2025-09-10 16:07  小鲨鱼2018  阅读(11)  评论(0)    收藏  举报