使用反斜杠的grep问题

tom*_*h13 3 grep ksh pattern-matching

我有以下文件:

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
Run Code Online (Sandbox Code Playgroud)

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

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

grep "$v1$v2" file
grep '$v1$v2' file
Run Code Online (Sandbox Code Playgroud)

我需要这个在KSH中工作, 请让我知道在这种情况下使用grep的正确方法.谢谢.

Jim*_*wis 7

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

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