J'ai cherché autour de sed
commande pour ajouter du texte dans un fichier dans une ligne spécifique. Cela fonctionne en ajoutant du texte après la ligne 1:
sed '1 a\
Mais je veux l'ajouter avant la ligne 1. Ce serait:
sed '0 a\
mais je reçois cette erreur: invalid usage of line address 0
.
Toute suggestion?
text-processing
command-line
sed
Manolo
la source
la source
Réponses:
L' option
sed
insert (i
) de Use qui insérera le texte à la ligne précédente.Question mise à jour de l'auteur:
Pour lui permettre de modifier le fichier à la place - avec GNU
sed
- je devais ajouter l’-i
option suivante:Aussi la syntaxe
Pour les non-GNU sed
Vous devez appuyer sur la touche de retour immédiatement après la barre oblique inverse
1i\
et aprèsfirst_line_text
:Notez également que certaines
sed
implémentations non-GNU (par exemple celle sur macOS) nécessitent un argument pour le-i
drapeau (à utiliser-i ''
pour obtenir le même effet qu'avec GNUsed
).la source
-i
option. Je mettrai à jour votre réponse avant d'accepter.sed '1 i\this text is entered above the existing first line' file
travaille pour moi.sed (GNU sed) 4.2.2
vient desed '1 i text to insert' -i file
fonctionner comme un charme. Merciawk
réponse classée ci-dessous. Cela devrait marcher.Echo est utilisé pour obtenir le texte. Cat nomfichier - imprime le fichier dans la console et> l'utilise pour envoyer vers un autre fichier nomfichier1, puis nous déplaçons nomfichier1 vers nomfichier pour que le texte soit inséré dans la première ligne du fichier souhaité.
la source
Vous pouvez utiliser Vim en mode Ex:
1
sélectionner la première lignei
insérer du texte et une nouvelle lignex
sauver et fermerla source
Vous souhaitez insérer du texte avant la première ligne plutôt que de l' ajouter après, utilisez donc
Un document ici peut également aider:
la source
Utiliser GNU awk> = 4.1:
Contrairement à toutes les
sed
réponses, cela fonctionne aussi sur les fichiers vides.la source
inplace
est une bibliothèque, et malheureusement elle apparaît sur toutes les distributions awk. Je reçois "awk: fatal: impossible d'ouvrir le fichier source 'en place' pour la lecture"GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.2)
Si vous ne spécifiez pas cette
-i
option, aucune erreur ne sera affichée, la sortie sera affichée sur un terminal standard, mais le texte ne sera pas inséré dans le fichier.la source
-i
commutateur.gnu sed
les deux spécifiques et il se trouve que celagnu sed
va accepter lei
sans barre oblique inverse). Si d’autres pensent que cela mérite une réponse séparée + un vote positif ... bon.La
0a
commande que vous avez essayé ne fonctionne dansex
, le prédécesseur devi
:La
printf
commande elle-même génère:Les
0a
moyennes s'ajoutent après la 0ème ligne (c'est-à-dire avant la première ligne).La ou les lignes suivantes sont le texte littéral à ajouter.
Le
.
sur une ligne par elle-même termine la commande "append".Les
x
causes Ex pour enregistrer les modifications dans le fichier et quitter.la source
Je suis surpris que dans cette vieille question, personne n'ait montré la commande sed la plus courante (et assez simple dans ce cas):
Ce qui fonctionne dans la plupart des coques et est portable pour plusieurs versions sed.
Si GNU sed est disponible, vous pouvez utiliser ceci:
La différence est que GNU sed autorise l’utilisation d’un
\n
pour une nouvelle ligne et que d’autres ont besoin d’une nouvelle ligne précédée d’une barre oblique inverse (qui fonctionne également dans GNU sed).Si un shell acceptant la
$'…'
syntaxe est en cours d'utilisation, vous pouvez insérer la nouvelle ligne directement. Sed voit que la nouvelle ligne est déjà présente:Ce qui fonctionne pour les versions plus sed.
la source
Malheureusement, toutes les réponses ci-dessus (principalement avec
sed
) n'ont pas fonctionné pour moi puisqu'elles se sont toutes substituées à la première ligne. Je suis sur uneUbuntu 16.04 LTS
machine. Voici ma solution de contournement avecGNU Awk 4.0.2
:la source
sed
réponse utilise le remplacement, mais ne remplace pas la ligne existante.Premier et dernier
Je suppose que quiconque a cherché comment insérer / ajouter du texte au début / à la fin d'un fichier doit probablement aussi savoir comment faire l'autre.
Explication
Cette
cal
sortie est dirigée vers gnused
(appeléegsed
sur macOS installé via brew.sh ) avec RegEx (-E
) étendu et 6 "scripts" appliqués (-e
) et les sauts de ligne avec échappée\
pour plus de lisibilité. Les scripts 1 et 2 utilisent1i\
"à la ligne 1, insérer". Les scripts 5 et 6 utilisent$a\
"à la ligne <dernière>, ajoutez". J'ai aligné verticalement les sorties de texte pour que le code représente ce que l'on attend du résultat. Les scripts 3 et 4 font des substitutions (la dernière ne s’appliquant qu'à "ligne <dernier>"). Le résultat est la conversion de la sortie de la commande en JSON valide.sortie
la source
1i
pour insérer du texte avant la première ligne. Quelqu'un avec cette question devra extraire les éléments dont il a besoin de votre réponse afin de résoudre son problème. Les questions sont gratuites, je vous invite donc à poser et à répondre à votre propre question afin de fournir votre réponse spécifique.