Se comprendo correttamente la tua domanda, tu che cosa scrivere del nuovo contenuto di testo nel file di testo direttamente sopra la prima riga vuota e se questo è corretto, ecco un esempio di come può essere fatto.
Si noti che a volte il comando AppleScript do shell script
può diventare complesso quando si deve sfuggire determinate istanze di carte speciali , ordinarie charters e / o se sono presenti più righe di comando , ecc.
Quindi nel seguente esempio ho intenzione di limitare il do shell script
comando a qualcosa il più semplice possibile che non richieda molta escaping pur consentendo un nomefile variabile e restituirà il numero di byte fino alla prima riga vuota nel file, poiché credo che questo sia il punto di inserimento che stai richiedendo per dove il nuovo il testo deve essere scritto.
Utilizzerò quindi il conteggio dei byte come punto offset come punto di riferimento in cui scrivere il nuovo testo nel file di testo di destinazione. Lo farò leggendo in variables dall'inizio del file su offset e leggendo dallo offset alla fine del file , quindi concatena le tre variabili a una variabile per scrivere nel file di destinazione dall'inizio del file. Sovrascrivendo così il vecchio contenuto con la combinazione di nuovi e vecchi contenuti.
Codice AppleScript :
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
Uscita terminale di "My Fruit Log.txt" prima di eseguire il codice di 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.
$
Uscita terminale di "My Fruit Log.txt" dopo aver eseguito il codice di 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.
$
Quindi, come puoi vedere, questo inserisce il nuovo contenuto di testo sopra la prima riga vuota nel file.
Di seguito vediamo il registro eventi dell'AppleScript Editor quando viene eseguito il codice AppleScrip sopra riportato
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