Ligne de commande linux magique - trouver et remplacer

Lorsque vous travaillez sur la ligne de commande Linux et que vous tombez sur un grand fichier ou un grand nombre de fichiers dont vous avez besoin de remplacer un certain texte avec un autre, la recherche et coller sur chaque instance du texte peut être un peu long. Eh bien, ne vous inquiétez plus. Linux a juste la solution pour vous. Voici un moyen de trouver et remplacer une chaîne de texte dans un ou plusieurs fichiers automatiquement.

Aux fins de cet exercice, nous allons utiliser un outil de ligne de commande Linux appelée « sed ». « Sed » est un outil polyvalent et très puissant, et beaucoup peut être écrit au sujet de ses capacités. Nous utilisons un aspect très limité de « sed » ici. Je recommande vivement de lire un peu plus sur « sed » si vous trouvez cet aspect intéressant.

Nous allons utiliser la syntaxe suivante pour rechercher et remplacer une chaîne de texte dans un fichier:

# sed -i « s / [orginal_text] / [nouveau_texte] / » filename.txt

Disons que vous avez un fichier appelé « database.txt » avec de nombreux cas de l`adresse IP de votre serveur de base de données en elle. Vous avez juste de passer à un nouveau serveur de base de données et la nécessité de le mettre à jour avec la nouvelle adresse IP du serveur. L`ancienne adresse IP est 192.168.1.16 et le nouveau est 192.168.1.22. Voici comment vous allez à ce sujet:

# cat database.txt
LOCAL_DATABASE = 192.168.1.16
Répertoire_local = / home / calvin /
PROD_DB = 192.168.1.16

# sed -i « s / 192.168.1.16 / 192.168.1.22 / g » database.txt
# cà database.txt
LOCAL_DATABASE = 192.168.1.22
Répertoire_local = / home / calvin /
PROD_DB = 192.168.1.22

Video: Installation bureau Gnome sous Debian en ligne de commande

Maintenant, ouvrez le fichier « database.inc » et vérifier si la nouvelle adresse IP a eu lieu de votre ancien. Voici l`éclatement de la commande ci-dessus. D`abord, vous appelez la commande « sed ». Ensuite, vous passez le paramètre « -s » qui signifie « à la place de ». Maintenant, nous utilisons un peu d`expressions régulières, communément connues pour le bit comme « regex ». Le « s » dans la chaîne entre guillemets signifie « substitut », et le « g » à la fin signifie « globale ». Entre eux, ils se traduisent par une « substitution globale de la la chaîne de texte que vous placez entre eux.

Vous pouvez en option sauter le « g » à la fin. Cela signifie que la substitution ne sera pas globale, ce qui se traduit pratiquement à la substitution de seulement la première instance de la chaîne en ligne. Donc, si vous aviez une ligne avec plusieurs instances du texte que vous essayez de remplacer, voici ce qui va se passer

# cat database.txt
LOCAL_DATABASE = 192.168.1.16
Répertoire_local = / home / calvin /
PROD_DB = 192.168.1.16, 192.168.1.16

# sed -i « s / 192.168.1.16 / 192.168.1.22 / » database.txt
# cat database.txt
LOCAL_DATABASE = 192.168.1.22
Répertoire_local = / home / calvin /
PROD_DB = 192.168.1.22, 192.168.1.16

Voici la vraie magie. Maintenant, dites que vous voulez changer une chaîne de texte non seulement dans un seul fichier, mais dans tout le répertoire que vous êtes. Il y a un certain nombre de fichiers texte dans lequel vous devez trouver et remplacer le « vin » avec « champagne » .

# trouver . -maxdepth 1 -name « * .txt » -type f -exec sed -i « s / vin / champagne / {}

Nous utilisons la commande find pour obtenir une liste de tous les fichiers texte dans le répertoire courant. C`est le « trouver. -maxdepth 1 -name « * txt » partie -type f ». "trouver . maxdepth 1 "dire l`ordinateur pour regarder dans le répertoire courant et ne pas aller plus loin que le répertoire courant. Le « -name « * txt » « partie dit trouver à la liste des fichiers ayant l`extension de « txt ». Ensuite, la section « -type f » précise que « trouver » ne doit choisir les fichiers correspondant exactement. Enfin, le « exec » partie dit « trouver » pour exécuter la commande qui suit, qui, dans ce cas, est la commande « sed » pour remplacer le texte - « sed -i `s / vin / champagne / {} ».

Je me rends compte que semble compliqué la commande ci-dessus. Cependant, une fois que vous utilisez un peu, vous vous rendrez compte qu`il est probablement utile de le noter et l`utiliser. Maintenant, essayez de changer une chaîne de texte dans plusieurs niveaux de répertoires.

Articles connexes