Pour insérer du texte à une ligne précise dans un fichier texte Mac existant, utilisez une action Shell dans Raccourcis pour créer une copie modifiée, vérifiez-la, puis renommez-la dans le Finder. Ce guide insère une ligne avant la ligne 3 à l’aide d’un exemple temporaire.

Il s’agit ici d’ajouter une ligne à un petit fichier texte brut local tout en conservant l’ordre des lignes environnantes. Vous allez créer un raccourci du Finder qui accepte exactement un fichier. Le texte à insérer et le numéro de ligne se trouvent dans le script, ce qui permet de répéter facilement la même modification sur des copies temporaires.

Que signifie « insérer à la ligne 3 » ?

Dans cet article, insérer signifie placer le nouveau texte avant la ligne numérotée existante. Avec trois lignes d’origine, insérer Birch avant la ligne 3 donne quatre lignes :

Position Fichier d’origine Fichier modifié
1 Cedar Cedar
2 Maple Maple
3 Willow Birch
4 — Willow

Une ligne est un enregistrement délimité par un saut de ligne, et non une rangée créée par le retour à la ligne visuel dans un éditeur. Les lignes vides sont comptées. L’exemple utilise du texte brut UTF-8 ordinaire avec des fins de ligne LF et un saut de ligne après la dernière ligne. Conservez ces conditions pour cet exercice ; les documents en texte enrichi et les fichiers utilisant d’autres encodages ou fins de ligne nécessitent une autre méthode.

La commande qui effectue la modification est sed de macOS. Ses adresses numériques comptent les lignes à partir de 1, et sa commande i écrit le texte à insérer avant la ligne indiquée. Elle écrit normalement le contenu transformé sur la sortie standard. Ces comportements documentés permettent au raccourci de créer un fichier de résultat distinct. Manuel sed distribué par Apple

Créer un fichier texte temporaire

Ouvrez Terminal et collez ce bloc de configuration complet. Il crée sur votre bureau un dossier nommé Line Insert Demo et un fichier de trois lignes nommé notes.txt. Si ce dossier existe déjà, la configuration s’arrête ; choisissez un nouveau nom de dossier avant de réessayer.

/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 création du dossier omet volontairement l’option qui autorise un répertoire existant. L’écriture du fichier n’a lieu qu’après la création d’un nouveau dossier ; cette configuration n’écrase donc pas un exemple antérieur. La documentation du shell d’Apple explique l’utilisation de printf et de la redirection de sortie pour créer des fichiers texte. Entrées et sorties du shell

Limitez cet exercice à ce dossier temporaire. Dans le Finder, ouvrez votre bureau et repérez Line Insert Demo ; vous sélectionnerez son fichier notes.txt après avoir créé le raccourci.

Créer un raccourci du Finder avec le bon type d’entrée

Dans Raccourcis, créez un raccourci nommé Insert Birch Before Line 3. Apple explique comment créer un raccourci à l’aide du bouton Ajouter de la barre d’outils, le nommer et ajouter des actions depuis la barre latérale. Créer un raccourci personnalisé sur Mac

Configurez-le comme suit :

  1. Ouvrez les Détails du raccourci et activez Utiliser comme action rapide, avec Finder sélectionné.
  2. Dans l’en-tête des entrées du raccourci, réglez le contenu accepté sur Fichiers et désactivez les autres types.
  3. Ajoutez l’action Exécuter un script Shell.
  4. Réglez son Shell sur /bin/sh, son Entrée sur Entrée du raccourci et Transmettre l’entrée sur comme arguments.
  5. Remplacez le script d’exemple de l’action par le programme complet de la section suivante.

Apple explique comment activer les raccourcis du Finder et limiter les types d’entrée qu’ils acceptent. Son type Fichiers comprend de nombreux types de documents ; ce réglage permet donc au raccourci de recevoir des fichiers, mais ne valide pas leur format texte. Le script ajoute des vérifications plus précises. Exécuter un raccourci pendant que vous utilisez votre Mac, Limiter l’entrée d’un raccourci, Comprendre les types d’entrée

La chaîne d’entrée est importante : le Finder transmet un fichier à Raccourcis, puis l’action Shell transmet son chemin comme argument, accessible dans le script sous la forme $1. N’ajoutez pas d’action de lecture de texte avant l’action Shell : ce programme a besoin du chemin du fichier pour lire le fichier existant et choisir le nom d’un fichier de sortie voisin.

Apple confirme que Raccourcis pour Mac permet d’exécuter directement des scripts Shell dans l’éditeur. Si l’exécution de scripts est désactivée, choisissez Raccourcis > Réglages, ouvrez Avancés et activez Autoriser l’exécution de scripts. Découvrir Raccourcis pour macOS, Réglages avancés de Raccourcis

Insérer la ligne et créer un résultat distinct

Collez le programme complet suivant dans Exécuter un script Shell. Il exige un seul fichier ordinaire existant, insère Birch avant la ligne 3 et écrit un fichier voisin dont le nom est formé en ajoutant .inserted.txt au chemin source.

#!/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

Les sauts de ligne physiques dans l’expression sed sont intentionnels. Conservez la barre oblique inversée après i, le saut de ligne qui suit et le texte inséré sur sa propre ligne. La structure de la commande suit le manuel distribué par Apple ; elle évite de s’appuyer sur une syntaxe d’insertion compacte copiée d’une autre implémentation de sed. Manuel sed : commandes et texte à insérer

Les vérifications qui l’entourent définissent les règles de décision du processus. Insérer du texte avant une ligne numérotée exige que cette ligne existe. Le programme rejette donc un fichier vide et un numéro de ligne cible supérieur au nombre de lignes. Il refuse également un nom de sortie déjà existant, tandis que le mode noclobber du shell ajoute une autre vérification lors de l’ouverture du fichier de sortie.

Le script lit l’original et écrit un fichier distinct. En cas d’échec d’écriture, l’original reste disponible, mais un fichier de sortie incomplet peut subsister. Considérez une erreur comme une opération inachevée et vérifiez ce fichier de sortie avant de le supprimer ou de réessayer. N’exécutez qu’une seule instance à la fois et ne modifiez pas la source pendant l’opération.

La sortie de l’action est un message d’état textuel contenant un chemin, et non un objet fichier de Raccourcis. Le fichier modifié est créé par la redirection du script. L’ajout ultérieur de Enregistrer le fichier enregistrerait la sortie de l’action au lieu d’effectuer l’insertion de ligne souhaitée. Apple décrit Enregistrer le fichier comme une action de partage destinée à la gestion des fichiers ; sa documentation ne la présente pas comme un éditeur de lignes numérotées. À propos des actions de partage dans Raccourcis sur Mac

Lancer le raccourci, vérifier le résultat et conserver le nom de fichier d’origine

Dans le Finder, faites un clic droit en maintenant la touche Contrôle sur le fichier temporaire notes.txt, puis choisissez Actions rapides et Insert Birch Before Line 3. Apple documente cette méthode de lancement. Si le raccourci est absent, vérifiez que le Finder est activé dans ses détails et que les entrées acceptées comprennent Fichiers. Exécuter un raccourci pendant que vous utilisez votre Mac

Après une exécution réussie, le dossier de démonstration contient à la fois notes.txt et notes.txt.inserted.txt. Ouvrez le second et vérifiez que son contenu est exactement le suivant :

Cedar
Maple
Birch
Willow

Vous pouvez également examiner le fichier de sortie depuis Terminal avec cette commande complète :

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

Pour placer le contenu modifié à l’emplacement d’origine, fermez les documents d’exemple et effectuez ces deux renommages dans le Finder. Vérifiez d’abord que notes.original.txt n’est pas utilisé ; s’il existe, choisissez un autre nom de sauvegarde libre.

  1. Sélectionnez notes.txt, appuyez sur Retour, renommez-le en notes.original.txt, puis appuyez de nouveau sur Retour.
  2. Sélectionnez notes.txt.inserted.txt, appuyez sur Retour, renommez-le en notes.txt, puis appuyez de nouveau sur Retour.
  3. Ouvrez le fichier nouvellement nommé notes.txt et vérifiez les quatre lignes.

Apple explique comment sélectionner un élément et appuyer sur Retour pour le renommer. Conservez l’extension finale .txt dans les deux noms. Si le Finder signale un conflit de nom, arrêtez-vous et vérifiez l’élément existant avant de choisir un nom libre. Renommer des fichiers, dossiers et disques sur Mac

À la fin, le contenu modifié se trouve sous notes.txt et le contenu d’origine sous notes.original.txt. Cela remplace le fichier occupant le chemin d’origine ; l’identité du fichier d’origine n’est pas conservée et rien ne garantit le transfert des étiquettes du Finder, des attributs étendus ou d’autres métadonnées.

Modifier l’insertion sans en changer le sens

Pour un autre fichier temporaire, remplacez line=3 par un numéro de ligne existant et remplacez Birch par une ligne de texte simple. Conservez la syntaxe d’insertion affichée. Le texte de l’exemple ne contient volontairement ni guillemets, ni signes dollar, ni accents graves, ni barres obliques inversées ; du texte arbitraire nécessite un échappement supplémentaire pour le shell et sed.

Consultez ce tableau de décision avant de modifier le script :

Modification souhaitée Action à effectuer
Placer du texte avant la première ligne Définissez line=1 dans un fichier d’exemple non vide.
Placer du texte avant une autre ligne existante Définissez line sur le numéro positif de cette ligne.
Ajouter du texte après la dernière ligne Utilisez une opération d’ajout distincte ; ce programme rejette les lignes cibles inexistantes.
Insérer du texte dans un fichier vide Créez son contenu initial séparément ; aucune ligne existante ne peut être ciblée.
Exécuter deux fois le même raccourci Vérifiez d’abord la sortie précédente. Après avoir remplacé l’original, une nouvelle exécution insérera une autre copie du texte.

Pour cette tâche sur ordinateur, les étapes de vérification utiles sont le fichier sélectionné, la position d’insertion, le résultat obtenu et le nom de fichier final. Une fois l’exemple à quatre lignes vérifié, la même séquence vous permet de tester clairement une autre insertion simple tout en conservant le texte de départ.

Sources