正如标题所说,我想在文本中找到一个字符串,但字符串很特别。文本可能是这样的:
{
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比较,但如果你想找一个字符串,做一个字符串比较,就这么简单。