如果打開終端,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