我有以下文件:
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的正确方法。 感谢。
答案 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