2009-03-02 8 views
1

Est-ce que quelqu'un sait d'une série de commandes unix qui permet à quelqu'un d'ajouter du texte à la fin d'une ligne spécifique dans un fichier?Quelle commande UNIX pouvons-nous utiliser pour ajouter du texte à une ligne spécifique dans un fichier?

par exemple

Ligne 1

Ligne 2

Ligne 3

Ligne 4

Je voudrais ajouter le texte "des informations supplémentaires" à la ligne 3, de sorte que la Le fichier ressemblera à ceci:

Ligne 1

Ligne 2

ligne 3, des informations supplémentaires

Ligne 4

Répondre

2

Perl:

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

$. est le numéro de ligne

5

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

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

Notez que myfile est pas modifié, de sorte que vous pouvez récupérer des erreurs possibles.

+0

utilisation superflue de chat! Oh non! –

+1

sed -i '3s/$/Hello World /' myfile est mieux –

+0

Cela ne changera pas réellement "myfile". –

2
sed -e "s/^Line 3/\0, extra info/" -i text.txt 
+0

Je pense qu'il veut dire par numéro de ligne, pas par contenu de ligne –

+0

J'ai compris que ... peu importe, maintenant il connaît les deux sens; -) –

8

dans awk il est:

awk '{s=$0; if(NR==3){ s=s ", Extra Information" } print s;}' myfile > newfile 

version correcte sed:

sed -e '3s/$/, Extra Information/' -i myfile 
4
awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile 

La partie avant que les accolades est le état: Si nous sommes dans la ligne 3, nous ajoutons du texte. Si les accolades sont omises, l'action par défaut est d'imprimer simplement $0. Rediriger vers un nouveau fichier ou un nouveau canal vers un autre programme, selon le cas. Vous ne pouvez pas rediriger vers le même fichier que vous lisez. Une solution commune est de rediriger vers un nouveau fichier, puis déplacez sur si la commande a réussi:

somecommand > oldfile.tmp && mv oldfile.tmp oldfile 
+0

jeter un oeil à qn http://stackoverflow.com/questions/598143/explain-about-linkagesexternal-internal-in-c/598180#598180 – yesraaj

+0

je n'ai rien à ajouter à sa réponse :) j'aime le entrée de blog liée sur le lien aussi. –

1

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

Si vous voulez ajouter quelque chose à (presque) toutes les lignes dans le fichier, vous devez créer un second fichier avec les informations supplémentaires pour chaque ligne et utiliser paste:

$ 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 
Questions connexes