有个小需求,需要将xcode工程文件中非arc的文件扫出来,拿到project.pbxproj。
一、mrc标识是“-fno-objc-arc”,需要扫除带这个标识的行,这里使用了一个字符串匹配。
cat project.pbxproj | awk "{print $1}" | while read mytest ; do
mrc="-fno-objc-arc"
if [[ $mytest == $mrc ]]
then
#处理
fi
done
二、提取出的$mytest的一个行示例:
C25669901C50DE8D002108A5 /Applications /Library /Network /System /Users /Volumes /bin /cores /dev /etc /home /installer.failurerequests /net /private /sbin /tmp /usr /var WBNoteIntegrateBridge.m in Sources BeeHive/ DJFPSKit/ IPAPatch/ LearnObjective-C/ LibInsformance/ WeKnow/ WeShow/ dev 2/ dev/ lottie-ios/ objc4/ 书籍/ 工程/ 未命名文件夹/ = {isa = PBXBuildFile; fileRef = C2xxxxxxxD002108A5 /Applications /Library /Network /System /Users /Volumes /bin /cores /dev /etc /home /installer.failurerequests /net /private /sbin /tmp /usr /var MyNoteIntegrateBridge.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
接着,我们要在这行中提取出文件名MyNoteIntegrateBridge.m。
使用sed命令。
filename=echo $mytest | sed 's/^.*var//g' | sed 's/\.m.*$//g'
解释:
sed 's/^.*var//g' 从头开始一直删除到var。
其中s/ //g 是格式,s表示替换,g表示全部替换,第一个/到第二个/ 是待替换部分,第二个/到第三个/是新内容,这里新内容时空。
中间的^.var ^表示以什么开头,.表示任意多个字符。
sed 's/.m.*$//g' 从.m开始一直删除到最后。
其中,s/ //g同上。
中间的 .m.$ . \是转义字符,两个在一起表示一个 . 字符 .同上 $表示以什么结尾。
完整命令
cat project.pbxproj | awk "{print $1}" | while read mytest ; do
mrc="-fno-objc-arc"
if [[ $mytest == $mrc ]]
then
#提取文件名
filename=echo $mytest | sed 's/^.*var//g' | sed 's/\.m.*$//g'
echo $filename
fi
done