Je veux ajouter un alias à la fin d'une certaine ligne de mon fichier hosts. Par exemple
J'ai
192.168.1.1 www.address1.com
192.168.1.2 www.address2.com
192.168.1.3 www.address3.com
Je veux que ça ressemble
192.168.1.1 www.address1.com
192.168.1.2 www.address2.com myalias
192.168.1.3 www.address3.com
Je veux trouver la ligne qui contient 19.2.68.1.2 et ajouter myalias à la fin. La ligne ne correspond pas nécessairement à la deuxième ligne du fichier, comme je l’ai montré ici. Cela pourrait être n'importe où.
En utilisant sed
et le motif décrit:
sed '/192.168.1.2/s/$/ myalias/' file
Utiliser sed
et un numéro de ligne spécifique:
sed '2s/$/ myalias/' file
Une solution awk
est également possible:
awk '{if (/^192\.168\.1\.2 /) {$0=$0 " myalias"}; print}' hosts
Ce qui précède lit les lignes du fichier hosts
une par une. Si la ligne a notre adresse IP au début, alors myalias
est ajouté à la ligne. La ligne est ensuite imprimée à stdout
.
Notez deux choses. Il y a un espace après l'adresse IP dans la condition if
. Sinon, l'expression régulière pourrait correspondre à 192.168.1.20
, etc. De plus, les points de l'adresse IP sont protégés par des barres obliques inverses. Sinon, ils pourraient correspondre à n'importe quel caractère.
Une forme plus concise de la solution est:
awk '/^192\.168\.1\.2 /{$0=$0 " myalias"}1' hosts
Je choisirais awk
, car vous pouvez utiliser des chaînes sans devoir utiliser de regex, où il faudrait échapper des points et utiliser des ancres et/ou des limites de Word. Vous pouvez également vous assurer que la chaîne correspond à une valeur de la colonne 1.
awk '$1==s{$0=$0 OFS alias}1' s=192.168.1.2 alias=myalias file
De plus, lorsqu'il fait partie d'un script plus volumineux, il est agréable de pouvoir utiliser des chaînes de variables. Avec sed
, vous auriez besoin de variables shell et de ruse de devis.
Voici un autre moyen d'utiliser awk
awk '/search pattern/{print $0 " myalias"; next}1' file