如何使用 bash 查找文本字符串,例如 - > "PROVISIONING_PROFILE[sdk=iphoneos*]" < - 这个字符串有很多特殊字符



正如标题所说,我想在文本中找到一个字符串,但字符串很特别。文本可能是这样的:

{
PREBINDING = NO;
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "22B333C5-6D7A-4A76-81F2-12A045DAE44C";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = 2;
}

(另外,如果你是ios开发者,你可能知道文本示例来自XXX.xcodeproj/project.pbxproj)

我需要查找并删除此行文本:

"PROVISIONING_PROFILE[sdk=iphoneos*]" = "22B333C5-6D7A-4A76-81F2-12A045DAE44C";

在这一行中,它有引号("),有括号([ ]),有星号(*),也有空格( )。当我尝试使用以下代码找到此行时:

provisionStr="22B333C5-6D7A-4A76-81F2-12A045DAE44C"
fileDir=project.pbxproj
totalLineStr=`grep $provisionStr  $fileDir`
sed -i "" "s@$provisionStr@@" $fileDir

此 bash 代码不起作用。请帮助我,我刚刚开始学习使用 bash。

sed 替代品,什么都没有:

s(for substitute)/string_to_match/new_string_or_empty_to_remove/g(for global/all document)

sed 's/"PROVISIONING_PROFILE[sdk=iphoneos*]" = "22B333C5-6D7A-4A76-81F2-12A045DAE44C";//g'

使用 转义双引号、星号和括号

听起来你想做的只是:

grep -v '"22B333C5-6D7A-4A76-81F2-12A045DAE44C"' file

如果您确实想在文件中搜索字符串,而不是在文件中搜索与 RE 的匹配项,那么您只需这样做,例如:

$ awk -v str='"PROVISIONING_PROFILE[sdk=iphoneos*]"' 'index($0,str)' file
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "22B333C5-6D7A-4A76-81F2-12A045DAE44C";
$ awk -v str='"PROVISIONING_PROFILE[sdk=iphoneos*]"' '!index($0,str)' file
{
PREBINDING = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = 2;
}

不要尝试转义所有 RE 元字符,然后进行 RE 比较,因为这毫无意义。如果你想寻找一个RE,那么做一个RE比较,但如果你想找一个字符串,做一个字符串比较,就这么简单。

相关内容

  • 没有找到相关文章