使用反斜杠的grep问题

时间:2011-04-23 00:43:40

标签: grep pattern-matching ksh

我有以下文件:

asdasd
asd
asd
incompatible:svcnotallowed:svc\:/network/bmb/clerver\:default
incompatible:svcnotallowed:svc\:/network1/bmb/clerver\:default
incompatible:svcnotallowed:svc\:/network2/bmb/clerver\:default
asdasd
asd
asd
as

现在假设我有两个变量v1="incompatible:svcnotallowed:"v2="svc\:/network1/bmb/clerver\:default"。 我想使用v1和v2搜索整个文件。我知道这是一个问题,因为文件中有一个'\'。我只是不知道如何消除它。我尝试使用单引号存储v1和v2(可变内容和grep用法),但是徒劳无功。

这是我尝试过的一系列命令:

grep "$v1$v2" file
grep '$v1$v2' file

我需要在 KSH 中使用它 请让我知道在这种情况下使用grep的正确方法。 感谢。

2 个答案:

答案 0 :(得分:7)

grep -F "$v1$v2" file应该这样做 - 使用-F选项,它将模式视为固定字符串,因此反斜杠不会被解释为转义或反向引用。

fgrep "$v1$v2" file可能是最便携的解决方案。正如tomkaith在他的评论中指出的那样,-F的{​​{1}}选项并未得到普遍支持。在Solaris上,默认grep不支持grep,但/ usr / xpg4 / bin中的版本不支持。{/ p>

答案 1 :(得分:2)

由于您使用的是ksh,因此您可以使用它来读取文件

v1="incompatible:svcnotallowed:"
v2="svc\:/network1/bmb/clerver\:default"
while read -r line
do
    case "$line" in
        "$v1$v2" ) echo "$line";;
    esac
done < file