J'ai un programme externe qui produit un fichier de sortie (large, 20K lignes possibles).
J'ai besoin d'insérer une nouvelle ligne entre la ligne existante 1 et la ligne 2. J'ai regardé awk et sed - j'utilise un liners dans chacun assez régulièrement - mais je n'ai pas été en mesure de trouver les bons commutateurs pour fais ça.
text-processing
sed
awk
Tim Brigham
la source
la source
awk 'NR==2 {print "new line"} 1'
Pour votre cas spécifique, cela devrait être plus simple:
Explication: à la ligne 1 , procédez comme suit
Ensuite, la ligne (vide maintenant) est à nouveau imprimée dans le cadre du cycle.
Si vous souhaitez ajouter une nouvelle ligne au lieu d'un nouveau caractère de ligne (ce que j'ai compris au départ), utilisez simplement
sed
la commande dea\
(ajouter):ou même
Il ajoute "
appended line
" après la ligne 1.la source
sed -i '1 a\\' file
pour juste une nouvelle ligne.'1 aapended line'
exemple.Je suppose que l'
sed
approche serait:sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txt
Cela mettra le texte dans la deuxième ligne du fichier, puis la deuxième ligne réelle dans le fichier deviendra la troisième.
Notez que, en utilisant le mode d'ajout , s'il devait l'être, il devait utiliser la première ligne, car l'ajout se produira après le numéro de ligne noté.
sed '1 a whatever_line_of_text_you_wanted_to_INSERT' filename.txt
la source
Explication.
la source
Cela pourrait fonctionner pour vous:
Si vous souhaitez insérer
something
après la nouvelle ligne:Ou si vous avez manipulé
\n
:Bien sûr,
a
c'est encore plus facile:la source
\n
à la première ligne!J'utilise habituellement
ed
pour cela:Semblable à une
sed
solution, mais sans l'encombrement des nouvelles lignes échappées.la source
echo
« s, notamment sousbash
:ed - filename <<< $'1a\nLine to insert\n.\nw'
.dash
, ce qui est le cas sur de nombreux systèmes/bin/sh
.echo
». Tout épargnerecho
s est bien »bash
seule caractéristique, mais en réduisant leecho
nombre de 4 à 1 œuvres dansdash
etksh
aussi:echo '1a\nLine to insert\n.\nw' | ed - filename
.printf %s\\n
simplement , qui met une nouvelle ligne après chaque argument que vous lui donnez et ne bloque pas les caractères spéciaux incorporés dans la ligne que vous souhaitez insérer. Aussi, pourquoi utilisered
quandex
est-il disponible?Solution Python
la source
Utilisation des
sed
codes d'échappement ANSI et (spécifiques à Bash):la source
j'utiliserais python pour cela
la source
J'aime juste utiliser un compteur explicite:
la source
La méthode la plus simple utilise
printf
etex
:1a
signifie "ajouter après la première ligne"; la.
fin de l'ajout;x
signifie enregistrer et quitter.la source
Aucune des réponses ci-dessus ne mentionne comment enregistrer les modifications dans le fichier d'origine, ce qui est, je pense, ce que l'OP demandait.
C'est certainement ce dont j'avais besoin pour accéder à la page.
Donc, en supposant que votre fichier s'appelle
output.txt
Mon cas d'utilisation particulier consiste à ajouter automatiquement une déclaration de feuille de style xsl à un fichier xml junit.
la source