如何让grep不解释我的搜索字符串中的特殊字符?

时间:2017-10-20 16:49:19

标签: bash grep escaping

执行./test.sh 12.34时,grep应与12.34匹配,而不是12-34。如何实现这一目标?

#!/bin/sh

ip=$1  
echo $ip
if netstat | grep ssh | grep $ip;  then
        netstat | grep ssh | grep $ip
else
        echo 'No'
fi

2 个答案:

答案 0 :(得分:6)

您可以将grep-F选项一起使用:

来自man grep:

 -F, --fixed-strings
         Interpret pattern as a set of fixed strings (i.e. force grep to
         behave as fgrep).

你的例子:

grep -F "$ip"

答案 1 :(得分:0)

grep使用正则表达式匹配字符串。 .是正则表达式中的特殊字符,因此需要进行转义。有一种相当优雅的方式:

export escaped_ip_addr = $(echo $ip_addr | sed "s/\./\\\./g")

哪会成为你的最终代码:

#!/bin/sh

#test.sh

ip=$1
echo $ip

export escaped_ip = $(echo $ip | sed "s/\./\\\./g")
if netstat | grep ssh | grep $escaped_ip;  then
        netstat | grep ssh | grep $escaped_ip
else
        echo 'No'
fi