AppleScript для замены текста в нескольких файлах - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь придумать общий многоцелевой способ замены текста в нескольких файлах через AppleScript.Это решение использует Perl.Может быть, есть более элегантный способ сделать это?

set myFolder to choose folder with prompt "Choose a folder:"
tell application "Finder"
    try 
        set txtFiles to (every file in entire contents of myFolder whose name ends with ".txt") as alias list
    on error 
        try
            set txtFiles to ((every file in entire contents of myFolder whose name ends with ".txt") as alias) as list
        on error 
            set txtFiles to {}
        end try
    end try
    set myFiles to txtFiles
end tell

repeat with CurrentFile in myFiles
    set CurrentFile to CurrentFile as string

    do shell script "perl -pi -e  's/replace/me/g; s/andme/too/g;' " & quoted form of (POSIX path of CurrentFile)

end repeat

Кроме того, в идеале я бы хотел сделать Perl-часть более читабельной, чтобы каждый шаблон поиска / замены находился в отдельной строке, но do shell script в AppleScript, похоже, не в состояниииметь дело с переносами строк, например,

do shell script "perl -pi -e  '
s/replace/me/g; 
s/andme/too/g;
s/andhere/measwell/g;
' " & quoted form of (POSIX path of CurrentFile)

Итак, по сути, есть ли лучший / более элегантный способ сделать это?Не обязательно должен быть с perl, но для неэксперта я продолжаю находить perl самый простой способ справиться с этим, особенно потому, что он хорош в регулярных выражениях (решение должно уметь выполнять регулярные выражения).

1 Ответ

0 голосов
/ 13 октября 2018

Согласно этому , вы могли бы использовать

do shell script "perl -pi -e  '" & ¬
" s/replace/me/g;" & ¬
" s/andme/too/g;" & ¬
" s/andhere/measwell/g;" & ¬
"' " & quoted form of (POSIX path of CurrentFile)

Извините за отсутствие у меня знаний об AppleScript, но, возможно, вы даже можете сделать что-то вроде следующего:

set PerlProg to "" & ¬
"s/replace/me/g; " & ¬
"s/andme/too/g; " & ¬
"s/andhere/measwell/g;"

set PerlCmd to "perl -i -pe'" & PerlProg & "'"

do shell script PerlCmd & " " & quoted form of (POSIX path of CurrentFile)
...