使用反斜杠的grep问题

使用反斜杠的grep问题,grep,pattern-matching,ksh,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=“不兼容:sv

我有以下文件:

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=“不兼容:svcnotallowed:”
v2=“svc\:/network1/bmb/clerver\:default“
。 我想用v1和v2搜索整个文件。我知道这是由于文件中有“\”而导致的问题。我只是不知道如何消除它。我曾尝试使用单引号存储v1和v2(变量内容和grep用法),但都是徒劳的

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

grep "$v1$v2" file
grep '$v1$v2' file
我需要这个在KSH中工作 请让我知道在这个场景中使用grep的正确方法。 谢谢。

grep-F“$v1$v2”文件
应该可以做到这一点——使用
-F
选项,它将模式视为固定字符串,因此反斜杠不会被解释为转义或反引用


但是
fgrep“$v1$v2”文件可能是最可移植的解决方案。正如tomkaith13在他的评论中指出的那样,
-F
选项到
grep
并没有得到普遍支持。在Solaris上,默认的
grep
不支持
-F
,但是/usr/xpg4/bin中的版本支持。

因为您使用的是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
v1=“不兼容:svcnotallowed:”
v2=“svc\:/network1/bmb/clerver\:默认值”
而read-r行
做
大写“$line”
“$v1$v2”)回显“$line”;;
以撒
完成<文件

明白了……:)我试过/usr/xpg4/bin/grep。。。。显然/usr/bin/grep不支持-F。。。感谢you@tom:让我猜猜,Solaris?我认为现在大多数其他平台都默认使用GNU grep。很高兴知道xgp4版本也支持
-F
。还有
fgrep
,它可能是这项工作最便携的工具。