GNU/Linux >> Tutoriels Linux >  >> Linux

Remplacement de chaîne dans Bash

Bash est un processus de commande compatible avec le shell UNIX dont la tâche principale est de manipuler des chaînes exécutées dans un environnement shell. Les programmeurs sont parfois appelés à travailler sur différents dossiers. Ils peuvent ajouter, supprimer et remplacer des parties ou l'ensemble du fichier pour s'adapter à leur travail. Cela fait appel à la connaissance du remplacement de chaîne dans bash. Le stockage des données peut être temporaire ou permanent, selon la nature des données. La chaîne de fichier est essentielle lors du remplacement du contenu du fichier.

Remplacement de la chaîne dans Bash

sed est vital et utile pour remplacer les chaînes d'un fichier par des scripts bash. L'éditeur de chaînes peut être utilisé de différentes manières pour remplacer le contenu d'un fichier dans bash. Un éditeur de chaîne alternatif mais sain est awk qui peut être mis en jeu lors du remplacement de la valeur de la chaîne à partir d'un fichier à l'aide de bash. Cet article montrera à l'aide d'exemples comment le contenu du fichier peut être remplacé dans bash. Notez que la connaissance des modèles regex peut également être très utile lors du remplacement de chaîne dans bash.

Manipulation de chaîne bash

Lors de remplacements mineurs ou simples, le sed n'est pas requis. Bash peut faire la manipulation.

Par exemple :
Lorsque vous remplacez un fichier fosslinux.gif par .mp4, sed n'est pas requis.
Pour exécuter le processus à l'aide de bash, utilisez le texte codé ci-dessous :

#/bin/bash
file_name="fosslinux.gif"
new_extension="mp4"

# Replace .gif with .mp4
generated_file_name=${file_name/.gif/.$new_extension}

echo $generated_file_name

Remplacement de chaîne à l'aide de sed

sed peut être appelé un éditeur de flux. Sed peut remplacer une chaîne dans des fichiers. Examinons un exemple de fichier appelé singleboardbytes.txt contenant les informations suivantes :
Foss Linux est un excellent site d'apprentissage pour tout utilisateur de Linux. Consultez les articles publiés par Foss Linux sur leur site.

Maintenant, à partir de notre fichier, nous devons remplacer le mot "site  » par « site Web ” et renommez le fichier en fosslinux.txt .

Comprendre la syntaxe sed

sed -i 's/search_string/replace_string/' filename
sed – is the command used in the execution of the above syntax
‘-i’ – used in the modification of contents in the original file with a replacement string aid whenever the search value exists in the file.
‘s’ – this is the substitute command
‘search_string’ – this represents the string value that is to be searched for replacement in the original file
‘replace_string’ – this represents the string value that is used to replace the searched value. The string should match the string found by the ‘search_string’ command.
‘filename’ – this is the filename whereby the replacement will be applied.

Exécutez la commande suivante dans votre terminal :

sed 's/site/website/g' singleboardbytes.txt > fosslinux.txt

Remarque :vous pouvez également exécuter la commande ci-dessus en la plaçant comme un script bash.
Remplacement à l'aide de -i commande

Après avoir exécuté la commande, l'étape suivante consiste à remplacer en utilisant le -i commande. -i est une représentation de "en place", ce qui signifie que le fichier est uniquement remplacé et qu'il n'y a pas de création de fichiers supplémentaires. En utilisant notre exemple ci-dessus, exécutez la commande suivante :

sed -i 's/site/website/g' singleboardbytes.txt

Dans la figure ci-dessous, vous pouvez voir un point d'exclamation indiquant :Le fichier "/home/tuts/singleboardbytes.txt a été modifié sur le disque". cela montre que les modifications ont été effectuées avec succès.

La figure ci-dessous est le fichier contenant les modifications apportées à l'étape précédente, à la fois au nom du fichier (singleboardbytes.txt à fosslinux.txt) et au mot site a été remplacé par le site Web .

Utiliser une variable comme valeurs de recherche et remplacements

Avec un peu d'interpolation, les variables peuvent être utilisées pour effectuer un remplacement de chaîne. Le premier argument sed, dans ce cas, doit utiliser des guillemets doubles au lieu de guillemets simples. Par exemple, votre code sera similaire à celui ci-dessous :

tuts() {
local search=$1
local replace=$2

# Note the double quotes
sed -i "s/${search}/${replace}/g" singleboardbytes.txt
}

sed a deux saveurs, à savoir :le FreeBSD et le sed Linux . Les distributions Linux utilisent le sed Linux tandis que les utilisateurs d'OS X utilisent le sed FreeBSD. Ces saveurs sont assez différentes, et donc on ne peut pas transférer des commandes d'une saveur sed à une autre.

Par exemple, lors du remplacement du contenu du fichier à l'aide de FreeBSD, une sauvegarde doit être effectuée à l'aide de l'extension .bak. Ou vous pouvez lancer une sauvegarde en utilisant des paires de guillemets vides immédiatement après la notation -i comme indiqué dans la syntaxe bash ci-dessous :

tuts() {
local search=$1
local replace=$2

sed -i "" "s/${search}/${replace}/g" singleboardbytes.txt
}

Si une sauvegarde n'est pas effectuée lors de l'utilisation de FreeBSD comme illustré dans le code de syntaxe ci-dessus, vous tomberez dans une erreur comme celle ci-dessous :

sed: 1: "/Users/user/path/tuts ...": extra characters at the end of h command

Comment remplacer un fichier et faire correspondre le modèle de chiffres à l'aide de la commande sed

Si vous exécutez le script avec succès, une recherche de tout le contenu numérique présent dans un fichier sera effectuée. Ensuite, le contenu sera alors remplacé en ajoutant $ avant les chiffres.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string containing digits and add $
sed -i 's/\b[0-9]\{5\}\b/$&/g' $1
fi

Remplacement d'une chaîne à l'aide de la commande awk

Dans ce cas, nous utiliserons la commande awk au lieu de la commande sed pour remplacer le contenu d'un fichier. La différence entre ces commandes est que la commande sed met directement à jour le fichier d'origine, ce qui n'est pas le cas avec la commande awk.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string based on date
awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1
fi

Conclusion

Les exemples ci-dessus sont essentiels pour votre progression dans l'apprentissage du remplacement d'une chaîne dans Bash. Par conséquent, pour être bon dans ce domaine, vous devrez vous entraîner régulièrement. Rechercher et remplacer une chaîne dans un fichier peut sembler complexe, mais vous trouverez cela beaucoup plus facile à gérer si vous suivez correctement nos instructions.

Un point à noter est que l'exécution des commandes peut parfois sembler plus gérable, mais vous devez faire attention à ne pas faire de ravages avec sed. Lorsque vous entrez les mauvaises commandes, vous casserez votre ordinateur, ce qui vous causera plus de problèmes comme la perte de données. Par conséquent, pour plus de sécurité, copiez et collez toujours le code tel qu'il est sur votre terminal. Cela évitera les fautes d'orthographe qui pourraient casser votre machine. Nous espérons que cet article vous a aidé à apprendre à remplacer une chaîne dans bash à l'aide de cet article.


Linux
  1. Comment puis-je ajouter une chaîne au début de chaque fichier dans un dossier en bash ?

  2. Supprimer les occurrences de chaîne dans le fichier texte

  3. linux bash, chaîne de casse camel à séparer par un tiret

  4. Que fait 'bash -c' ?

  5. script bash ajoute du texte à la première ligne d'un fichier

Bash :ajouter au fichier

35 exemples de scripts bash

Script Bash - Manipulation de chaînes

Script bash (III)

Remplacement d'une sous-chaîne par une autre chaîne dans Bash

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier