Comment remplacer une chaîne dans un fichier en bash

Comment remplacer une chaîne dans un fichier en bash

En tant que programmeur, vous devrez peut-être travailler avec différents types de fichiers pour stocker les données temporairement ou en permanence. Parfois, vous devrez peut-être remplacer une partie du fichier ou modifier le contenu particulier du fichier. Pour remplacer le contenu dans un fichier, vous devez rechercher la chaîne de fichiers particulière. Le 'Sed' La commande est utilisée pour remplacer toute chaîne dans un fichier à l'aide d'un script bash. Cette commande peut être utilisée de différentes manières pour remplacer le contenu d'un fichier en bash. Le awk'La commande peut également être utilisée pour remplacer la chaîne dans un fichier. Ce tutoriel vous montrera comment remplacer n'importe quelle valeur de chaîne à partir d'un fichier à l'aide d'un script bash.

01. Syntaxe générale pour SED
02. Remplacer la chaîne dans le fichier par le script bash sed
03. SED G et I Commandes pour le global et les cas insensibles
04. correspondance du chiffre SED
05. Syntaxe générale pour awk
06. Remplacer la chaîne dans le fichier par un script bash awk
07. Remplacez la chaîne dans le fichier par des scripts de bash pure
08. Remplacer la chaîne dans le fichier par Perl One Liner

Exemples de données pour le remplacement de la chaîne de bash

Un fichier texte nommé Ventes.SMS avec le contenu suivant est créé pour afficher les opérations de remplacement.
Ventes.SMS

Date Montant la zone
01/01/2020 60000 DHAKA
10/02/2020 76000 Rajshahi
21/03/2020 54000 Khulna
15/04/2020 78000 Chandpur
17/05/2020 45000 BOGRA
02/06/2020 67000 COMILLA

Syntaxe générale pour SED: Remplacez la chaîne dans un fichier

La syntaxe de base du 'sed'La commande pour remplacer la chaîne particulière dans un fichier est donnée ci-dessous.

Syntaxe

SED -I's / Search_String / Replace_String / 'Nom de fichier

Chaque partie de la syntaxe ci-dessus est expliquée ci-dessous.

'-je' L'option est utilisée pour modifier le contenu du fichier d'origine avec la chaîne de remplacement si la chaîne de recherche existe dans le fichier.
'S' indique la commande de substitut.
'search_string' Contient la valeur de chaîne qui sera recherchée dans le fichier pour le remplacement.
'Replace_string' contient la valeur de chaîne qui sera utilisée pour remplacer le contenu du fichier qui correspond au 'search_string' valeur.
'nom de fichier' Contient le nom de fichier où la recherche et le remplacement seront appliqués.

Exemple 1: Remplacez le fichier par la commande 'SED'

Dans le script suivant, le texte de recherche et de remise sera tiré de l'utilisateur. Si la chaîne de recherche existe dans les ventes.txt ', puis il sera remplacé par la chaîne de remplacement. Ici, une recherche sensible au cas sera effectuée.

#!/ bac / bash
# Attribuer le nom de fichier
filename = "Sales.SMS"
# Prenez la chaîne de recherche
lire -p "Entrez la chaîne de recherche:" Recherche
# Prenez la chaîne de remplacement
lire -p "Entrez la chaîne de remplacement:" Remplacer
Si [[$ recherche != "" && $ remplacer != ""]]; alors
SED -I "S / $ Search / $ remplace /" $ nom de fichier
Fi

Sortir:

Exemple 2: Remplacez le fichier par la commande 'SED' par «g» et «i»

Le script suivant fonctionnera comme l'exemple précédent, mais la chaîne de recherche sera recherchée à l'échelle mondiale du drapeau 'G', et la recherche insensible au cas sera effectuée pour l'indicateur 'I'.

#!/ bac / bash
# Prenez la chaîne de recherche
lire -p "Entrez la chaîne de recherche:" Recherche
# Prenez la chaîne de remplacement
lire -p "Entrez la chaîne de remplacement:" Remplacer
Si [[$ recherche != "" && $ remplacer != ""]]; alors
SED -I "S / $ Search / $ Replace / Gi" 1 $
Fi

Sortir:

Exemple 3: Remplacez le fichier par la commande «SED» et le modèle de chiffre correspondant

Le script suivant recherchera tout le contenu numérique dans un fichier et remplacera le contenu en ajoutant le '$' symbole au début des nombres.

#!/ bac / bash
# Vérifiez la valeur d'argument de la ligne de commande existe ou non
Si [1 $ != ""]; alors
# Recherchez toutes les chaînes contenant des chiffres et ajoutez $
sed -i 's / \ b [0-9] \ 5 \ \ b / $ & / g' 1 1
Fi

Sortir:

Remplacez la chaîne dans un fichier par la commande 'awk'

Le 'awk ' La commande est une autre façon de remplacer la chaîne dans un fichier, mais cette commande ne peut pas mettre à jour le fichier d'origine directement comme le 'sed ' commande.

Exemple 4: Remplacez le fichier par la commande 'awk'

Le script suivant stockera le contenu mis à jour dans le temp.SMS fichier qui sera renommé par le fichier d'origine.

#!/ bac / bash
# Vérifiez la valeur d'argument de la ligne de commande existe ou non
Si [1 $ != ""]; alors
# Recherchez toute la chaîne en fonction de la date
awk 'sub ("02/06/2020", "12/06/2020") print' $ 1> temp.txt && mv temp.txt 1 $
Fi

Sortir:


Dans l'exemple ci-dessus, la commande 'awk' est utilisée pour rechercher une chaîne «02/06/2020», qui est la dernière date de notre exemple de fichier. La chaîne correspondante sera remplacée par une nouvelle chaîne «12/06/2020». La chaîne résultant si elle est substituée ou non est imprimée sur chaque ligne.

Exemple 5: Remplacez la chaîne dans le fichier par des scripts de bash pure

Dans cet exemple, nous ferons le même travail avec un bash tandis que la boucle et une commande de remplacement de chaîne bash. Nous allons écrire la sortie dans un TMP fichier et remplacer l'original à la fin du script. Voir le code ci-dessous:

#!/ bac / bash
en lisant la ligne; faire
# Remplacez toutes les instances en ligne de Khulna par Dhaka
echo $ line // khulna / dhaka
fait < Sales.txt > / tmp / ventes.o.SMS
MV / TMP / Sales.o.Ventes TXT.SMS

Vous pouvez voir que la commande ECHO effectuera un remplacement dans la variable de ligne, car le script lit chaque ligne dans le fichier texte et remplacer toutes les instances de Khulna avec la nouvelle chaîne Dhaka. La boucle while se lit dans le fichier d'entrée Ventes.SMS et écrit dans le fichier de sortie / tmp / ventes.o.SMS. Enfin, le fichier de sortie temporaire remplace le fichier d'origine par le mv commande.

Sortir:

Exemple 6: Remplacez la chaîne dans le fichier par une doublure Perl

Cette tâche est en fait super simple avec Perler. Perl est une vieille langue moins populaire mais extrêmement puissante. Cela peut être fait avec une commande line dans la ligne de commande bash:

perl -pi.BAK -E 'S / DHAKA / BOGRA / G' Sales.SMS

-pi.bak indique à Perl de traiter le fichier en place et également de créer un fichier de sauvegarde avec le .extension BAK. Le remplacement sera tous des cas de Dhaka pour Bogra En tant que nouveau texte. Ici, vous pouvez voir la sortie facile de cette commande:

SORTIR:

Conclusion

Cet article vous a montré comment utiliser les scripts bash pour remplacer les chaînes dans un fichier par la recherche et remplacer la ligne de commande en bash. Il existe de nombreuses façons de le faire, y compris avec les commandes SED, AWK, PERL; Vous pouvez utiliser des scripts de bash natif avec des boucles et un regex et il y a plus de façons même de ne pas discuter ici. Bash et Linux ont de nombreuses façons de faire le même travail.