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

。
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

。
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

。

浙公网安备 33010602011771号