web-dev-qa-db-fra.com

ajouter du texte à la fin de chaque ligne

Je suis en ligne de commande Linux et j'ai un fichier avec

127.0.0.1
128.0.0.0
121.121.33.111

Je voudrais

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

Je me souviens que mes collègues utilisaient sed pour cela, mais après avoir lu le manuel sed, vous ne savez toujours pas comment le faire en ligne de commande?

74
user2275580

Vous pouvez essayer d'utiliser quelque chose comme:

sed 's/$/:80/' ips.txt > new-ips.txt

Si votre format de fichier est identique à celui que vous avez décrit dans votre question.

La commande de substitution s/// fait correspondre ( la recherche ) à la fin de chaque ligne de votre fichier (à l'aide du caractère $), puis ajoute ( remplace ) le :80 à la fin de chaque ligne. Le fichier ips.txt est votre fichier d’entrée ... et new-ips.txt est votre fichier que vous venez de créer (), le résultat final de vos modifications. )


En outre, si vous avez une liste de numéros IP auxquels sont déjà associés des numéros de port (comme indiqué par Vlad et comme indiqué par aragaer ,), vous pouvez essayer d'utiliser quelque chose comme:

sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt

Ainsi, par exemple, si votre fichier d’entrée ressemble à quelque chose comme ceci (notez le :80) :

127.0.0.1
128.0.0.0:80
121.121.33.111

Le résultat final ressemblerait à ceci:

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
117
summea

Si vous souhaitez ajouter du texte à la fin de chaque ligne à la place (dans le même fichier), vous pouvez utiliser le paramètre -i, par exemple:

sed -i'.bak' 's/$/:80/' foo.txt

Cependant, l'option -i correspond à une extension Unix non standard et peut ne pas être disponible sur tous les systèmes d'exploitation.

Vous pouvez donc utiliser ex (ce qui équivaut à vi -e/vim -e):

ex +"%s/$/:80/g" -cwq foo.txt

qui ajoutera :80 à chaque ligne, mais il pourra parfois l’ajouter à des lignes vides.

Donc, la meilleure méthode consiste à vérifier si la ligne contient réellement un nombre, puis à l'ajouter, par exemple:

ex  +"g/[0-9]/s/$/:80/g" -cwq foo.txt

Si le fichier a un format plus complexe, envisagez d'utiliser l'expression régulière appropriée au lieu de [0-9].

10
kenorb
sed 's/.*/&:80/'  abcd.txt >abcde.txt
10
sudhir

Version concise de la commande sed :

sed -i s/$/:80/ file.txt

Explication:

  • seds tream ed itor
    • -ii n-place (éditer le fichier en place)
    • ss Commande ubstitution
    • Déclaration /replacement_from_reg_exp/replacement_to_text/
    • $ correspond à la fin de la ligne ( replacement_from_reg_exp )
    • :80 texte que vous souhaitez ajouter à la fin de chaque ligne ( replacement_to_text )
  • file.txt le nom du fichier
5
simhumileco

À l'aide d'un éditeur de texte, recherchez ^M (Ctrl-M ou retour chariot) à la fin de chaque ligne. Vous devrez d'abord les supprimer, puis ajouter le texte supplémentaire à la fin de la ligne.

sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt
1
John