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?
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
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]
.
sed 's/.*/&:80/' abcd.txt >abcde.txt
sed -i s/$/:80/ file.txt
sed
s tream ed itor -i
i n-place (éditer le fichier en place)s
s Commande ubstitution/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À 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