如果打开终端,cd
到包含这些文件的目录,我觉得这是最好的找到这些文件:
find . -type f -name "*.m*" -print
此找到当前
.
目录是一个文件
-type f
具有名称中的一切
*.m
,
*.mm
,
*.mmmmm
等(
*.m*
)。然后,您将每个生成的文件
-print
输出到控制台(或管道)。如果您希望将每个文件传递给另一个进程(使用
xargs
),最好将
-print
替换为
-print0
,以便正确处理文件名中的空格。
接下来,使用sed
替换这些结果中的文本。 (Mac附带的sed
版本与GNU sed
不同,不能正确处理换行符和其他特殊字符。如果这不适合您,可能需要抓取该版本。)
更换的基本结构是:
sed -i "" -e 's/NSLocalizedString(\(.*\), \(.*\))/NSLocalizedStringFromTable(\1, table, \2)/g' "FILENAME"
的
-i ""
取代就地文件(它保存到已打开的同一文件)。
-e
只是意味着下一个文本将成为一个表达式。用
s/
开始表达式表示您将要进行搜索和替换。它通常采用以下格式:
s/[search for this pattern]/[replace with this pattern]/g
末尾的
/g
表示“全局”,或者“对尽可能多的实例在每行上找到尽可能多的实例”。
搜索模式/NSLocalizedString(\(.*\), \(.*\))/
发现文本,然后复制\(...\)
标记的内容(您必须转义括号以便sed
知道要记住它)。
的替换模式,/NSLocalizedStringFromTable(\1, table, \2)/
,与NSLocalizedStringFromTable
取代NSLocalizedString
,然后夹着确切更换所述第一和第二\(.*\)
对进入\1
和\2
引用。
如果你有这样的文字值:
NSLocalizedString(@"Darn tootin'", @"How they say 'that is correct' in some dialects");
那么结果会变成:
NSLocalizedStringFromTable(@"Darn tootin'", table, @"How they say 'that is correct' in some dialects");
现在,在评论@shellter询问是否意味着你想要的文字字table
是在那里,无论是参数1或参数2应来自不同的表格等。这肯定会改变此搜索字符串的格式。
最后,您可以在终端上面的两个功能结合成一个长的shell脚本并运行它:
find . -type f -name "*.m*" -print0| \
xargs -0 -I FILENAME \
sed -i "" -e 's/NSLocalizedString(\(.*\), \(.*\))/NSLocalizedStringFromTable(\1, table, \2)/g' "FILENAME"
如果你的意思是不同的值要到位“VAR1”和“VAR2”的你在原始文章中提到,您需要指定。
你的具体编程问题是什么? – Polynomial
我编辑了我的问题到底 – unspokenblabber
这不是一个具体的编程问题。这是要求我们为你写脚本。 StackOverflow是关于解决特定问题,而不是让人们编写代码。 – Polynomial