使用AppleScript查找和替换文本文件



我正试图编写一个applescript,将通过启动代理运行。脚本需要做的是编辑用户首选项列表文件,以便默认保存位置特定于该用户。我知道这可以通过将"~/documents"设置为模板列表中的位置来完成。但以Premier Pro为例,它还需要将临时文件写入本地驱动器。为了简单,我希望每个用户都有这些放在一个位置根据他们的用户名。这个脚本只需要在第一次登录时从模板创建本地配置文件时才需要运行。

我已经开始使用一些样本代码在这个网站上找到,只是做一个简单的测试下面。这个测试应该编辑一个txt文件并用另一个单词替换一个单词。这个脚本目前不能工作。测试时,它在TextEdit中打开test.txt,但没有做任何其他事情。没有错误显示。

提前谢谢你

约翰

replaceText("replace this", "replace with this", "/Volumes/USB_Drive/test.txt")

on replaceText(search_string, replacement_text, this_document)
tell application "TextEdit"
    open this_document
    set AppleScript's text item delimiters to the search_string
    set this_text to the text of the front document as list
    set AppleScript's text item delimiters to the replacement_text
    set the text of the front document to (this_text as string)
    close this_document saving yes
end tell
end replaceText

这是一个不需要文本编辑的版本。它将以utf-8编码读取文件,更新其内容并将其作为utf-8编码的文本存储回文件中。我使用try块来写文件的原因是,如果另一个应用程序同时以读权限打开文件,则会出现错误。如果您希望搜索和替换区分大小写,则可以将considering case块包装在设置为content 的每个文本项的周围。当您替换字符串时,不需要激活它,只需要找到它。

set stringToFind to "replace that"
set stringToReplace to "with this"
set theFile to choose file
set theContent to read theFile as «class utf8»
set {oldTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, stringToFind}
set ti to every text item of theContent
set AppleScript's text item delimiters to stringToReplace
set newContent to ti as string
set AppleScript's text item delimiters to oldTID
try
    set fd to open for access theFile with write permission
    set eof of fd to 0
    write newContent to fd as «class utf8»
    close access fd
on error
    close access theFile
end try

嗯,是的,正如@dj_bazzie_wazzie指出的那样,您真的不需要文本编辑器,您可以使用终端并执行如下操作:

perl -pi -e 's/old text/new text/g' /path/to/theFile.plist

当然,你可以在AppleScript中使用强大的do shell script命令:

do shell script "perl -pi -e 's/" & search_string & "/" & replacement_text & "/g' " & quoted form of (POSIX path of file_path)

——假设file_path是一个带有mac风格(冒号分隔)文件路径的变量

从http://discussions.apple.com/message/20542594#20542594修改,下面的处理程序可以满足您的要求。我做了一些改动,加入了你的变量。一些注意事项:(1)处理程序调用之前的'my'确保它被视为脚本的处理程序,而不是TextEdit应该在'内部'解释的东西(因为它在tell块中);(2)'considering case'使处理程序区分大小写,我认为这是您想要的;(3)你可以考虑像TextWrangler这样的东西,它有强大的和功能丰富的AppleScript支持,并在其AS字典中包含文本替换,就像Smile一样,一个很棒的脚本编辑器(它可以处理文本,并很好地格式化plist文件)。

tell application "TextEdit"
    set workingWin to open this_document
    set this_text to the text of the workingWin
    set the text of the workingWin to (my replaceText(this_text, search_string, replacement_text))
    close workingWin saving yes
end tell
to replaceText(someText, oldItem, newItem)
    (*
         replace all occurances of oldItem with newItem
              parameters -     someText [text]: the text containing the item(s) to change
                        oldItem [text, list of text]: the item to be replaced
                        newItem [text]: the item to replace with
              returns [text]:     the text with the item(s) replaced
         *)
    considering case
        set {tempTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, oldItem}
        try
            set {itemList, AppleScript's text item delimiters} to {text items of someText, newItem}
            set {someText, AppleScript's text item delimiters} to {itemList as text, tempTID}
        on error errorMessage number errorNumber -- oops
            set AppleScript's text item delimiters to tempTID
            error errorMessage number errorNumber -- pass it on
        end try
    end considering
    return someText
end replaceText

相关内容

  • 没有找到相关文章

最新更新