Quelle commande unix pouvons-nous utiliser pour ajouter du texte à une ligne spécifique d’un fichier?

StackOverflow https://stackoverflow.com/questions/602921

  •  03-07-2019
  •  | 
  •  

Question

Quelqu'un a-t-il connaissance d'une série de commandes Unix permettant à quelqu'un d'ajouter du texte à la fin d'une ligne spécifique d'un fichier?

par exemple

Ligne 1

Ligne 2

Ligne 3

Ligne 4

Je souhaite ajouter le texte ", informations supplémentaires". vers la ligne 3 pour que le fichier ressemble maintenant à ceci:

Ligne 1

Ligne 2

Ligne 3, informations supplémentaires

Ligne 4

Était-ce utile?

La solution

Perl:

perl -p -e's{\n}{, extra information\n} if $. ==3' myfile

$. est le numéro de ligne

Autres conseils

dans awk c'est:

awk '{s=
sed -e '3s/$/, Extra Information/' -i myfile
; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile

version appropriée:

<*>

Voici une version avec sed portable (sans l'option -i):

sed '3s/$/Hello World/' myfile

Notez que monfichier n'est pas modifié, vous pouvez ainsi remédier à d'éventuelles erreurs.

awk 'NR == 3 { print 
somecommand > oldfile.tmp && mv oldfile.tmp oldfile
", extra information" } NR != 3' myfile

La partie devant les accolades est la condition : si nous sommes à la ligne 3, nous ajoutons du texte. Si les accolades sont omises, l’action par défaut consiste simplement à imprimer $ 0 . Rediriger vers un nouveau fichier ou diriger vers un autre programme, selon le cas. Vous ne pouvez pas rediriger vers le même fichier que vous venez de lire. Une solution de contournement courante consiste à rediriger vers un nouveau fichier, puis à la déplacer si la commande a réussi:

<*>
sed -e "s/^Line 3/\0, extra info/" -i text.txt

Si vous souhaitez que les informations supplémentaires soient ajoutées à une seule ligne, l'un des doublons sed / awk le fera.

Si vous souhaitez ajouter quelque chose à (presque) chaque ligne du fichier, vous devez créer un deuxième fichier avec les informations supplémentaires pour chaque ligne et utiliser coller :

$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra 
something

something else
$ paste myfile extra
line 1  something
line 2
line 3  something else
line 4
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top