file text replace find applescript

file - Encuentre y reemplace en archivos de texto usando AppleScript



replace find (3)

Modificado de http://discussions.apple.com/message/20542594#20542594 , el controlador a continuación hace lo que quiere. Hice algunos cambios y agregué tus variables. Algunas notas: (1) el ''mi'' antes de la llamada del manejador se asegura de que se vea como el manejador del script y no algo que TextEdit debería interpretar ''internamente'' (porque está en un bloque tell); (2) "caso de consideración" hace que el controlador sea sensible a mayúsculas y minúsculas, lo que supongo que desea; (3) Puede considerar algo como TextWrangler, que tiene soporte AppleScript robusto y rico en funciones, e incluye reemplazo de texto en su diccionario AS, al igual que Smile, un fantástico Editor de scripts (que puede trabajar con texto y formatear archivos muy bien) .

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

Estoy tratando de escribir un AppleScript que se ejecutará a través de un agente de lanzamiento. Lo que la secuencia de comandos debe hacer es editar un archivo plist de preferencias del usuario para que las ubicaciones de guardado predeterminadas sean específicas para ese usuario. Soy consciente de que esto se puede hacer simplemente configurando "~ / documentos" como la ubicación en la lista de la plantilla. Pero Premier Pro, por ejemplo, también necesita escribir archivos de borrador en un disco local. Para simplificar, me gustaría que cada usuario coloque estos en una ubicación basada en su nombre de usuario. Este script solo deberá ejecutarse si el perfil local acaba de crearse a partir de una plantilla al iniciar sesión por primera vez.

Empecé usando un código de muestra que se encuentra en este sitio y simplemente hago una prueba simple a continuación. Esta prueba debería editar un archivo txt y reemplazar una palabra por otra. Este script actualmente no está funcionando. Cuando se prueba, abre test.txt en TextEdit pero no hace nada más. No se muestran errores tampoco.

Gracias de antemano

John.

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


Aquí una versión que no necesita editar texto. Leerá el archivo en codificación utf-8, actualizará su contenido y lo almacenará en el archivo como texto codificado en utf-8. La razón por la que utilizo un bloqueo de prueba para escribir el archivo es que habrá un error si otra aplicación tiene el archivo abierto con permiso de lectura al mismo tiempo. El bloque de casos considerado se puede ajustar alrededor del conjunto ti a cada elemento de texto del contenido si desea que la búsqueda y el reemplazo sean sensibles a las mayúsculas y minúsculas. No es necesario que esto esté activo cuando reemplaza la cadena, solo para encontrarla.

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


Bueno, sí, como señala @dj_bazzie_wazzie, realmente no necesitas un editor de texto para esto, puedes usar el terminal y hacer algo como:

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

que por supuesto puede usar en AppleScript con el poderoso comando de do shell script :

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

--assuming file_path es una variable con ruta de archivo estilo Mac (separados por dos puntos).