Si entiendo su pregunta correctamente, debe escribir un nuevo contenido de texto en el archivo de texto que se encuentra arriba de la primera línea en blanco, y si eso es correcto, aquí hay un ejemplo de una forma en que puede hacerse.
Tenga en cuenta que a veces el comando de AppleScript do shell script
puede volverse complejo al tener que escapar ciertas instancias de cartas especiales , ordinarias cartas y o si hay varias líneas de comando involucradas, etc.
Por lo tanto, en el siguiente ejemplo, voy a limitar el comando do shell script
a algo tan simple como pueda que no requiere mucho escape mientras permite un nombre de archivo variable y devolverá el recuento de bytes hasta la primera línea en blanco en el archivo, ya que creo que este es el punto de inserción que está solicitando donde está el nuevo el texto debe ser escrito.
Luego usaré el recuento de bytes como el punto offset como el punto de referencia donde se escribiría el nuevo texto en el archivo de texto de destino. Lo haré leyendo en variables desde el inicio del archivo hasta el offset y leyendo desde el offset hasta el final del archivo , luego concatene las tres variables a una 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 code :
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 del terminal de "My Fruit Log.txt" antes de ejecutar código AppleScript :
$ 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 del terminal de "My Fruit Log.txt" después de ejecutar el código AppleScript :
$ 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 sobre la primera línea en blanco del archivo.
A continuación, vemos el Registro de eventos del Editor de AppleScript cuando se ejecuta el código de AppleScrip :
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