首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bash查找文本字符串,如--> "PROVISIONING_PROFILE[sdk=iphoneos*]“<--此字符串有许多特殊字符

如何使用bash查找文本字符串,如--> "PROVISIONING_PROFILE[sdk=iphoneos*]“<--此字符串有许多特殊字符
EN

Stack Overflow用户
提问于 2012-12-08 14:47:35
回答 2查看 330关注 0票数 1

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

代码语言:javascript
复制
{
PREBINDING = NO;
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "22B333C5-6D7A-4A76-81F2-12A045DAE44C";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = 2;
}

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

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

代码语言:javascript
复制
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "22B333C5-6D7A-4A76-81F2-12A045DAE44C";

在这一行中,它有引号(“),有方括号( ),有星号(*),也有空格()。

代码语言:javascript
复制
provisionStr="22B333C5-6D7A-4A76-81F2-12A045DAE44C"
fileDir=project.pbxproj

totalLineStr=`grep $provisionStr  $fileDir`
sed -i "" "s@$provisionStr@@" $fileDir

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

EN

回答 2

Stack Overflow用户

发布于 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'

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

票数 1
EN

Stack Overflow用户

发布于 2012-12-08 16:17:02

听起来你想做的就是:

代码语言:javascript
复制
grep -v '"22B333C5-6D7A-4A76-81F2-12A045DAE44C"' file

如果您曾经想要在文件中搜索字符串,而不是在文件中搜索与RE匹配的字符串,那么您可以这样做,例如:

代码语言:javascript
复制
$ 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比较,但是如果你想找一个字符串,做一个字符串比较,就这么简单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13775247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档