Jusqu'à présent, j'ai pu trouver comment ajouter une ligne au début d'un fichier, mais ce n'est pas exactement ce que je veux. Je vais le montrer sur un exemple
Contenu du fichier
some text at the beginning
Résultat
<added text> some text at the beginning
C'est similaire mais je ne veux pas créer de nouvelle ligne avec ça ...
Je voudrais le faire avec sed
si possible.
sed
.Réponses:
sed
peut fonctionner sur une adresse:Quelle est cette magie que
1s
vous voyez sur chaque réponse ici? Adressage de ligne! .Vous souhaitez ajouter
<added text>
sur les 10 premières lignes?Ou vous pouvez utiliser
Command Grouping
:la source
Si vous souhaitez ajouter une ligne au début d'un fichier, vous devez l'ajouter
\n
à la fin de la chaîne dans la meilleure solution ci-dessus.La meilleure solution ajoutera la chaîne, mais avec la chaîne, elle n'ajoutera pas de ligne à la fin d'un fichier.
la source
Si le fichier est composé d'une seule ligne, vous pouvez utiliser:
S'il s'agit de plusieurs lignes. un des:
J'ai inclus ce dernier pour que vous sachiez comment faire des gammes de lignes. Ces deux «remplacer» le marqueur de ligne de départ sur leurs lignes affectées par le texte que vous souhaitez insérer. Vous pouvez également (en supposant que votre version
sed
soit suffisamment moderne) utiliser:pour effectuer une modification sur place.
la source
Vous pouvez utiliser
cat -
la source
echo
ajout d'une nouvelle ligne?> file
à la commande, il a spammé mon terminal avec"some text at the beginning"
printf '%s' "some text" | cat - filename > tmpfile && mv tmpfile filename
Pour insérer juste une nouvelle ligne:
la source
Utiliser un sous-shell:
la source
Notez que sous OS X,,
sed -i <pattern> file
échoue. Cependant, si vous fournissez une extension de sauvegarde,, estsed -i old <pattern> file
alorsfile
modifié en place lors de safile.old
création. Vous pouvez ensuite supprimerfile.old
dans votre script.la source
PROBLÈME: balisez un fichier, en haut du fichier, avec le nom de base du répertoire parent.
C'est-à-dire, pour
balisez le haut de
file1
avecProgramming
.SOLUTION 1 - fichiers non vides:
1s
place le texte à la ligne 1 du fichier.SOLUTION 2 - fichiers vides ou non vides:
La
sed
commande ci-dessus échoue sur les fichiers vides. Voici une solution, basée sur /superuser/246837/how-do-i-add-text-to-the-beginning-of-a-file-in-bash/246841#246841Notez que la
-
commande in the cat est obligatoire (lit l'entrée standard: voirman cat
pour plus d'informations). Ici, je crois, il faut prendre la sortie de l'instruction printf (vers STDIN), et cat ça et le fichier à temp ... Voir aussi l'explication au bas de http://www.linfo.org/cat .html .J'ai également ajouté
-f
à lamv
commande, pour éviter qu'on me demande des confirmations lors du remplacement des fichiers.Pour récapituler sur un répertoire:
Notez également que cela rompra les chemins avec des espaces; il existe des solutions ailleurs (par exemple, globalisation de fichiers ou
find . -type f ...
solutions de type) pour celles-ci.ADDENDA: Re: mon dernier commentaire, ce script va vous permettre de récursivement sur des répertoires avec des espaces dans les chemins:
la source
Salut avec retour chariot:
la source
Pour ajouter une ligne en haut du fichier:
la source
Il existe un moyen très simple:
la source
Juste pour le plaisir, voici une solution utilisant
ed
qui n'a pas le problème de ne pas travailler sur un fichier vide. Vous pouvez le mettre dans un script shell comme n'importe quelle autre réponse à cette question.Le script ci-dessus ajoute le texte à insérer à la première ligne, puis joint la première et la deuxième ligne. Pour éviter que ed ne se termine en cas d'erreur avec une jointure non valide, il crée d'abord une ligne vierge à la fin du fichier et la supprime plus tard si elle existe toujours.
Limitations: ce script ne fonctionne pas s'il
<added text>
est exactement égal à une seule période.la source
mes deux centimes:
Cela fonctionnera même si la chaîne contient une barre oblique
"/"
la source
Le premier
tac
canalise le fichier vers l'arrière (dernière ligne en premier) de sorte que le "texte à insérer" apparaît en dernier. Le 2e letac
retourne à la ligne afin que la ligne insérée soit au début et que le fichier d'origine soit dans son ordre d'origine.la source
Une autre solution avec des alias. Ajoutez à votre fichier init rc / env:
Usage:
la source