我想将特定文件的每一行与以下字符串进行比较
#orb_plugins = ["local_log_stream", "iiop_profile", "giop", "iiop"];
(“file.txt”包含此特定行)
我尝试了以下方法,在特殊字符前加上“\”前缀
IFS=''
while read -r line
do
if [ "$line" == "#orb_plugins = \[\"local_log_stream\", \"iiop_profile\", \"giop\", \"iiop\"\];" ]
then
echo "String found. Do remaining steps"
fi
done < file.txt
答案1
为什么不使用正确的工具来完成这项工作,即grep
:
grep -qxFf- file.txt <<\IN && printf %s\\n "String found. Do remaining steps"
#orb_plugins = ["local_log_stream", "iiop_profile", "giop", "iiop"];
IN
一旦找到匹配项,就会停止读取文件。它(平均)也比循环快大约 100 倍while read
。
答案2
最简单的方法是在右侧使用单引号:
if [ "$line" == '#orb_plugins = ["local_log_stream", "iiop_profile", "giop", "iiop"];' ]
这样,要匹配的字符串就会按字面解释。
如果您喜欢使用双引号,则不得转义括号 ( []
),而只能转义双引号 ( ""
):
if [ "$line" == "#orb_plugins = [\"local_log_stream\", \"iiop_profile\", \"giop\", \"iiop\"];" ]