Per inserire testo in una riga specifica di un file di testo Mac esistente, usa un’azione shell di Comandi Rapidi per creare una copia modificata, controllala e poi rinominala nel Finder. Questa guida inserisce una riga prima della riga 3 usando un esempio temporaneo.

Qui si tratta di aggiungere una riga a un piccolo file di testo semplice locale, mantenendo in ordine le righe circostanti. Creerai un comando rapido del Finder che accetta esattamente un file. Il testo da inserire e il numero di riga si trovano nello script, così è facile ripetere la stessa modifica su copie temporanee.

Che cosa significa «inserire alla riga 3»?

In questo articolo, inserire significa collocare il nuovo testo prima della riga numerata esistente. Con tre righe originali, inserendo Birch prima della riga 3 si ottengono quattro righe:

Posizione File originale File modificato
1 Cedar Cedar
2 Maple Maple
3 Willow Birch
4 — Willow

Una riga è un record delimitato da un carattere di nuova riga, non una riga creata dall’a capo visivo nell’editor. Le righe vuote contano. L’esempio usa testo semplice UTF-8 ordinario con terminatori di riga LF e una nuova riga dopo l’ultima riga. Per questo esercizio, mantieni queste condizioni; i documenti RTF e i file che usano altre codifiche o terminatori di riga richiedono un metodo diverso.

Il comando che esegue la modifica è macOS sed. I suoi indirizzi numerici contano le righe a partire da 1 e il comando i scrive il testo da inserire prima della riga indicata. Normalmente scrive il contenuto trasformato nell’output standard. Questi comportamenti documentati permettono al comando rapido di creare un file di risultato separato. Manuale sed distribuito da Apple

Crea un file di testo temporaneo

Apri Terminale e incolla questo blocco completo di configurazione. Crea sul Desktop una cartella chiamata Line Insert Demo e un file di tre righe chiamato notes.txt. Se la cartella esiste già, la configurazione si interrompe; scegli un nome di cartella nuovo prima di riprovare.

/bin/sh <<'SH'
set -e
demo_dir="$HOME/Desktop/Line Insert Demo"
/bin/mkdir "$demo_dir"
printf '%s\n' 'Cedar' 'Maple' 'Willow' > "$demo_dir/notes.txt"
printf 'Created: %s\n' "$demo_dir/notes.txt"
SH

La creazione della cartella omette volutamente l’opzione che consente di usare una directory esistente. La scrittura del file viene eseguita solo dopo aver creato una nuova cartella, quindi questa configurazione non sovrascrive un esempio precedente. La documentazione della shell di Apple spiega come usare printf e il reindirizzamento dell’output per creare file di testo. Input e output della shell

Mantieni questo esercizio all’interno di quella cartella temporanea. Nel Finder, apri la Scrivania e individua Line Insert Demo; dopo aver creato il comando rapido, selezionerai il file notes.txt al suo interno.

Crea un comando rapido del Finder con il tipo di input corretto

Crea in Comandi Rapidi un comando chiamato Insert Birch Before Line 3. Apple spiega come creare un comando rapido usando il pulsante Aggiungi nella barra degli strumenti, assegnargli un nome e aggiungere azioni dalla barra laterale. Creare un comando rapido personalizzato sul Mac

Configuralo nel modo seguente:

  1. Apri Dettagli del comando rapido e abilita Usa come azione rapida, selezionando Finder.
  2. Nell’intestazione dell’input del comando rapido, imposta il contenuto accettato su File, disattivando gli altri tipi.
  3. Aggiungi l’azione Esegui script shell.
  4. Imposta Shell su /bin/sh, Input su Input comando rapido e Passa input su come argomenti.
  5. Sostituisci lo script di esempio dell’azione con il programma completo della sezione successiva.

Apple documenta come abilitare i comandi rapidi del Finder e limitare i tipi di input accettati. Il tipo File include molti tipi di documenti, quindi questa impostazione rende i file disponibili al comando rapido; non ne verifica il formato di testo. Lo script aggiunge controlli più specifici. Eseguire un comando rapido mentre lavori sul Mac, Limitare l’input di un comando rapido, Capire i tipi di input

La catena di input è importante: il Finder fornisce un file a Comandi Rapidi e l’azione shell passa il suo percorso come argomento, disponibile nello script come $1. Non aggiungere un’azione di lettura del testo prima dell’azione shell: questo programma ha bisogno del percorso del file per poter leggere il file esistente e scegliere un nome per il file di output adiacente.

Apple conferma che Comandi Rapidi per Mac supporta l’esecuzione di script shell direttamente nell’editor. Se l’esecuzione degli script è disabilitata, scegli Comandi Rapidi > Impostazioni, apri Avanzate e abilita Consenti l’esecuzione degli script. Scopri Comandi Rapidi per macOS, Impostazioni avanzate di Comandi Rapidi

Inserisci la riga e crea un risultato separato

Incolla questo programma completo in Esegui script shell. Richiede un solo file regolare esistente, inserisce Birch prima della riga 3 e scrive un file adiacente aggiungendo .inserted.txt al percorso del file sorgente.

#!/bin/sh
set -eu

fail() {
    printf '%s\n' "$1" >&2
    exit 1
}

[ "$#" -eq 1 ] || fail 'Select exactly one example text file.'
file=$1
line=3

case "$file" in
    /*) ;;
    *) fail 'The input must be an absolute file path.' ;;
esac

[ -f "$file" ] || fail 'The input file does not exist or is not a regular file.'
[ ! -L "$file" ] || fail 'Select the example file itself, not a symbolic link.'
[ -r "$file" ] || fail 'The input file cannot be read.'

count=$(/usr/bin/sed -n '$=' "$file") || fail 'Could not count the input lines.'
[ -n "$count" ] || fail 'The input file is empty.'
[ "$line" -le "$count" ] || fail 'The insertion line is beyond the end of the file.'

output="${file}.inserted.txt"
if [ -e "$output" ] || [ -L "$output" ]; then
    fail 'The output name already exists. Inspect or rename that result first.'
fi

if (
    set -C
    /usr/bin/sed "${line}i\\
Birch
" "$file" > "$output"
); then
    printf 'Created edited copy: %s\n' "$output"
else
    fail 'Could not finish the edited copy. Inspect any partial output before retrying.'
fi

Le interruzioni di riga effettive all’interno dell’espressione sed sono intenzionali. Mantieni la barra rovesciata dopo i, la nuova riga successiva e il testo da inserire sulla propria riga. La struttura del comando segue il manuale distribuito da Apple; evita di fare affidamento su una forma compatta di inserimento copiata da un’implementazione diversa di sed. Manuale sed: comandi e testo da inserire

I controlli circostanti definiscono le regole decisionali del flusso di lavoro. Per inserire una riga prima di un numero specificato, quella riga deve esistere. Perciò il programma rifiuta i file vuoti e un numero di riga oltre l’ultima. Inoltre, non accetta un nome di output già esistente; la modalità noclobber della shell fornisce un ulteriore controllo all’apertura del file di output.

Lo script legge l’originale e scrive un file separato. Se la scrittura non riesce, l’originale resta disponibile, ma potrebbe rimanere un file di output incompleto. Considera un errore come un’operazione non terminata e controlla il file di output prima di rimuoverlo o riprovare. Esegui una sola istanza alla volta e non modificare il file sorgente durante l’operazione.

L’output dell’azione è un messaggio di stato testuale contenente un percorso, non un oggetto file di Comandi Rapidi. Il file modificato viene creato dal reindirizzamento dello script. Aggiungere Salva file in seguito salverebbe l’output dell’azione invece di eseguire l’inserimento di riga previsto. Apple documenta Salva file come un’azione di condivisione per la gestione dei file; la documentazione non la descrive come uno strumento per modificare righe numerate. Informazioni sulle azioni di condivisione in Comandi Rapidi sul Mac

Eseguilo, controlla il risultato e mantieni il nome file originale

Nel Finder, fai clic tenendo premuto Control sul file temporaneo notes.txt e scegli Azioni rapide, quindi Insert Birch Before Line 3. Apple documenta questa modalità di avvio. Se il comando rapido non compare, verifica che Finder sia abilitato nei dettagli e che tra gli input accettati sia incluso File. Eseguire un comando rapido mentre lavori sul Mac

Dopo un’esecuzione corretta, la cartella di esempio contiene sia notes.txt sia notes.txt.inserted.txt. Apri il secondo e controlla che il contenuto sia esattamente:

Cedar
Maple
Birch
Willow

Puoi anche controllare l’output da Terminale con questo comando completo:

/bin/cat "$HOME/Desktop/Line Insert Demo/notes.txt.inserted.txt"

Per collocare il contenuto modificato nel percorso originale, chiudi i documenti di esempio ed esegui queste due rinomine nel Finder. Per prima cosa, verifica che notes.original.txt non sia già in uso; se esiste, scegli un altro nome di backup libero.

  1. Seleziona notes.txt, premi Return, rinominalo notes.original.txt e premi di nuovo Return.
  2. Seleziona notes.txt.inserted.txt, premi Return, rinominalo notes.txt e premi di nuovo Return.
  3. Apri il file appena rinominato notes.txt e verifica le quattro righe.

Apple documenta la selezione di un elemento e la pressione di Return per rinominarlo. Mantieni l’estensione finale .txt in entrambi i nomi. Se il Finder segnala una collisione di nomi, fermati e controlla l’elemento esistente prima di scegliere un nome libero. Rinominare file, cartelle e dischi sul Mac

Al termine, il contenuto modificato si trova in notes.txt e il contenuto originale in notes.original.txt. Questo sostituisce il file che occupa il percorso originale; non conserva l’identità del file originale né garantisce il mantenimento di tag del Finder, attributi estesi o altri metadati.

Modifica l’inserimento senza cambiarne il significato

Per un altro file temporaneo, modifica line=3 impostandolo su un numero di riga esistente e sostituisci Birch con una semplice riga di testo. Mantieni intatta la sintassi di inserimento mostrata. Il testo di esempio non contiene volutamente virgolette, simboli del dollaro, accenti gravi o barre rovesciate; per testo arbitrario servono ulteriori accorgimenti di quoting per la shell e sed.

Prima di modificare lo script, usa questa tabella decisionale:

Modifica desiderata Cosa fare
Inserire testo prima della prima riga Imposta line=1 su un file di esempio non vuoto.
Inserire testo prima di un’altra riga esistente Imposta line su quel numero di riga positivo.
Aggiungere testo dopo l’ultima riga Usa un’operazione di aggiunta separata; questo programma rifiuta un numero di riga inesistente.
Inserire testo in un file vuoto Crea separatamente il contenuto iniziale; non c’è una riga esistente a cui fare riferimento.
Eseguire lo stesso comando rapido due volte Controlla prima l’output precedente. Dopo aver sostituito l’originale, un’altra esecuzione inserirà un’ulteriore copia del testo.

Per questa operazione sul desktop, i controlli utili riguardano il file selezionato, la posizione di inserimento, il risultato completato e il nome file finale. Quando l’esempio di quattro righe è corretto, la stessa sequenza ti offre un modo chiaro per provare un altro semplice inserimento mantenendo disponibile il testo di partenza.

Fonti