使用grep批量替换语言文件?

时间:2013-11-22 15:06:41

标签: batch-file replace grep find

我正在尝试查找/替换长语言文件:

 $_LANG['accountinformation'] = "Account Information";
 $_LANG['accountstatistics'] = "Account Statistics";

成为:

 $_LANG['accountinformation'] = "Informations du compte";
 $_LANG['accountstatistics'] = "Statistiques du compte";

知道我在这样的文件中有完整的翻译:

Informations du compte
Statistiques du compte

有没有办法用文本编辑器替换这些短语,比如BBedit使用grep或其他东西而不是手工复制/粘贴每一个?

2 个答案:

答案 0 :(得分:0)

以下是使用批处理/ vbs混合脚本的方法:

@echo off
setlocal

call :FindReplace "Account Statistics" "Statistiques du compte" Thefile.txt
call :FindReplace "Account Information"  "Informations du compte" Thefile.txt

exit /b 

:FindReplace <findstr> <replstr> <file>
set tmp="%temp%\tmp.txt"
If not exist %temp%\_.vbs call :MakeReplace
for /f "tokens=*" %%a in ('dir "%3" /s /b /a-d /on') do (
  for /f "usebackq" %%b in (`Findstr /mic:"%~1" "%%a"`) do (
    echo(&Echo Replacing "%~1" with "%~2" in file %%~nxa
    <%%a cscript //nologo %temp%\_.vbs "%~1" "%~2">%tmp%
    if exist %tmp% move /Y %tmp% "%%~dpnxa">nul
  )
)
del %temp%\_.vbs
exit /b

:MakeReplace
>%temp%\_.vbs echo with Wscript
>>%temp%\_.vbs echo set args=.arguments
>>%temp%\_.vbs echo .StdOut.Write _
>>%temp%\_.vbs echo Replace(.StdIn.ReadAll,args(0),args(1),1,-1,1)
>>%temp%\_.vbs echo end with

将file.txt更改为您的文件名。将脚本保存为文本编辑器中的replace.cmd,然后从命令行运行它。

答案 1 :(得分:0)

如果你试图说文件是对齐的 - 英文文件中每行只有一个字符串定义,而法语包含相同顺序的翻译等价,每行一个 - 然后是一个简单{ {1}}进行一些后期处理应该这样做。

paste

如果您的paste strings.def fr.txt | sed 's/"[^"]*";\t\(.*\)/"\1";/' >output.txt 方言不支持sed标签,则必须在许多shell中提供文字标签( ctrl-v标签)。< / p>