Si he entendido bien tu pregunta, lo que quieres es escribir un nuevo contenido de texto en el archivo de texto directamente por encima de la primera línea en blanco y si eso es correcto, aquí tienes un ejemplo de una forma de hacerlo.
Tenga en cuenta que a veces el AppleScript do shell script
comando puede ser complejo cuando se tiene que escape ciertos casos de cartas especiales , cartas ordinarias y o si son múltiples líneas de comando están involucrados, etc.
Así que en el siguiente ejemplo voy a limitar el do shell script
comando a algo tan simple como pueda que no requiera muchos escapes y que a la vez permita un nombre de archivo variable y devolverá el cuenta de bytes hasta el primer línea en blanco en el archivo, ya que creo que este es el punto de inserción que está solicitando para donde se debe escribir el nuevo texto.
A continuación, utilizaré el cuenta de bytes como el offset como punto de referencia donde se escribirá el nuevo texto en el archivo de texto de destino. Esto lo haré leyendo en variables desde el inicio del archivo hasta el offset y la lectura del offset hasta el final del archivo, y luego concatenar los tres variables a uno variable para escribir en el archivo de destino desde el principio del archivo. De este modo, se sobrescribe el contenido antiguo con la combinación de contenido nuevo y antiguo.
AppleScript código :
set filePathName to POSIX path of (path to desktop as string) & "My Fruit Log.txt"
try
set offsetCount to (do shell script "grep -b -m1 '^$' \"" & filePathName & "\" | cut -f1 -d:")
end try
if offsetCount is equal to "0" or offsetCount is equal to "" then
display dialog "The contents of the target file does not conform to the necessary requirements for processing and or may contain consecutive 0D Carriage Return Characters, instead of the 0A Line Feed Characters expected by default in macOS." buttons {"OK"} default button 1
return
end if
set newContent to "I ate a strawberry at 1 am."
try
set referenceNumber to open for access filePathName with write permission
set oldContentUpToFirstBlankLine to read referenceNumber from 1 to offsetCount
set oldContentFromFirstBlankLine to read referenceNumber from offsetCount to eof
set allContent to oldContentUpToFirstBlankLine & newContent & oldContentFromFirstBlankLine
write allContent to referenceNumber starting at 0
close access referenceNumber
on error eStr number eNum
display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with title "File I/O Error..." with icon caution
try
close access referenceNumber
end try
return
end try
Salida de terminal de "My Fruit Log.txt" antes de ejecutar AppleScript código :
$ cat "$HOME/Desktop/My Fruit Log.txt"
2016_11_09 -
2016_11_08 -
I ate a banana at 8 am.
I ate a kiwi at 11 am.
I ate a mango at 6 pm.
2016_11_07 -
I ate a pear at 6 am.
I ate a tangerine at 4 pm.
I ate a peach at 8 pm.
$
Salida de terminal de "My Fruit Log.txt" después de ejecutar AppleScript código :
$ cat "$HOME/Desktop/My Fruit Log.txt"
2016_11_09 -
I ate a strawberry at 1 am.
2016_11_08 -
I ate a banana at 8 am.
I ate a kiwi at 11 am.
I ate a mango at 6 pm.
2016_11_07 -
I ate a pear at 6 am.
I ate a tangerine at 4 pm.
I ate a peach at 8 pm.
$
Como puede ver, esto inserta el nuevo contenido de texto por encima de la primera línea en blanco del archivo.
A continuación vemos el registro de eventos del editor de AppleScript cuando el AppleScrip anterior código se ejecuta:
tell current application
path to desktop as string
--> "Macintosh HD:Users:me:Desktop:"
do shell script "grep -b -m1 '^$' \"/Users/me/Desktop/My Fruit Log.txt\" | cut -f1 -d:"
--> "13"
open for access "/Users/me/Desktop/My Fruit Log.txt" with write permission
--> 172
read 172 from 1 to "13"
--> "2016_11_09 -
"
read 172 from "13" to eof
--> "
2016_11_08 -
I ate a banana at 8 am.
I ate a kiwi at 11 am.
I ate a mango at 6 pm.
2016_11_07 -
I ate a pear at 6 am.
I ate a tangerine at 4 pm.
I ate a peach at 8 pm.
"
write "2016_11_09 -
I ate a strawberry at 1 am.
2016_11_08 -
I ate a banana at 8 am.
I ate a kiwi at 11 am.
I ate a mango at 6 pm.
2016_11_07 -
I ate a pear at 6 am.
I ate a tangerine at 4 pm.
I ate a peach at 8 pm.
" to 172 starting at 0
close access 172
end tell
0 votos
Usted dijo " Así, la forma más fiable de articular dónde quiero escribir el texto es "en la línea anterior a la primera instancia de una línea en blanco en el documento". ", bueno eso no es lo que muestran las imágenes donde tu escribiste " Me comí un coco a las 10 de la mañana. estaba entre dos líneas que no tenían una línea en blanco entre ellas. Entonces, ¿qué es lo que realmente quieres?
0 votos
@user3439894 No, las imágenes son correctas. La segunda imagen es para explicar que la línea a introducir no es siempre la segunda línea, sino la línea indicada por "Esta es la ubicación ".
0 votos
@user3439894 En la segunda imagen, no quiero que el texto se escriba donde dice: "Me comí un coco a las 10 de la mañana". Quiero que el texto se escriba donde dice: "Esta es la ubicación donde quiero que escriba el AppleScript". Puede ser la segunda línea desde arriba, o puede ser la cuarta línea desde arriba. El número de líneas desde la parte superior varía, pero la ubicación siempre estará directamente encima de la primera instancia de una línea en blanco. Lo que escribió grgarside es correcto.