正如标题所说,我想在文本中找到一个字符串,但这个字符串很特殊。文本可能如下所示:
{
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。
发布于 2012-12-08 15:08:10
不带任何内容的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'
使用\转义双引号、星号和括号
发布于 2012-12-08 16:17:02
听起来你想做的就是:
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比较,但是如果你想找一个字符串,做一个字符串比较,就这么简单。
https://stackoverflow.com/questions/13775247
复制相似问题