GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel Unix Sed :Exemples avancés de substitution Sed

Cet article fait partie de la série en cours Unix Sed Tips and Tricks.

Dans nos articles précédents sur sed, nous avons appris l'impression sed, la suppression sed, la substitution sed, l'écriture de fichiers sed et les commandes multiples sed.

Dans cet article, passons en revue quelques solutions de contournement intéressantes avec la commande de remplacement "s" dans sed avec plusieurs exemples pratiques.

Je. Délimiteur de substitution Sed

Comme nous en avons discuté dans notre article précédent, nous pouvons utiliser les différents délimiteurs tels que @ % |; :dans la commande de substitution sed.

Commençons par créer le fichier path.txt qui sera utilisé dans tous les exemples mentionnés ci-dessous.

$ cat path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin

Exemple 1 – délimiteur sed @ :remplacez /opt/omni/lbin par /opt/tools/bin

Lorsque vous substituez un nom de chemin qui a '/', vous pouvez utiliser @ comme délimiteur au lieu de '/'. Dans l'exemple sed ci-dessous, dans la dernière ligne du fichier d'entrée, /opt/omni/lbin a été remplacé par /opt/tools/bin.

$ sed 's@/opt/omni/lbin@/opt/tools/bin@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/tools/bin:/opt/omni/sbin:/root/bin

Exemple 2 – sed / délimiteur :remplacez /opt/omni/lbin par /opt/tools/bin

Lorsque vous devez utiliser '/' dans la substitution liée au nom de chemin, vous devez échapper '/' dans les données de substitution, comme indiqué ci-dessous. Dans cet exemple sed, le délimiteur "/" a été échappé dans la partie REGEXP et REPLACEMENT.

$ sed 's/\/opt\/omni\/lbin/\/opt\/tools\/bin/g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:
/opt/tools/bin:/opt/omni/sbin:/root/bin

II. Sed '&' Obtenir la chaîne correspondante

La partie précise d'une ligne d'entrée sur laquelle l'expression régulière correspond est représentée par &, qui peut ensuite être utilisée dans la partie de remplacement.

Exemple 1 – sed &Utilisation :remplacez /usr/bin/ par /usr/bin/local

$ sed 's@/usr/bin@&/local@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin/local:/usr/sas/bin
/usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin/local:/opt/omni/bin:
/opt/omni/lbin:/opt/omni/sbin:/root/bin

Dans l'exemple ci-dessus, "&" dans la pièce de rechange sera remplacé par /usr/bin qui correspond au modèle et l'ajoutera avec /local. Ainsi, dans la sortie, toutes les occurrences de /usr/bin seront remplacées par /usr/bin/local

Exemple 2 – sed &Usage :Correspond à toute la ligne

&remplace tout ce qui correspond à la REGEXP donnée.

$ sed 's@^.*$@<<<&>>>@g' path.txt
<<</usr/kbos/bin:/usr/local/bin:/usr/jbin/:/usr/bin:/usr/sas/bin>>>
<<</usr/local/sbin:/sbin:/bin/:/usr/sbin:/usr/bin:/opt/omni/bin:>>>
<<</opt/omni/lbin:/opt/omni/sbin:/root/bin>>>

Dans l'exemple ci-dessus, regexp a "^.*$" qui correspond à toute la ligne. La pièce de remplacement <<<&>>> écrit la ligne entière avec <<>> respectivement au début et à la fin de la ligne.

III. Regroupement et références arrière dans Sed

Le regroupement peut être utilisé dans sed comme une expression régulière normale. Un groupe s'ouvre avec "\(" et se ferme avec "\)". Le regroupement peut être utilisé en combinaison avec le référencement arrière.

La rétro-référence est la réutilisation d'une partie d'une Expression Régulière sélectionnée par regroupement. Les références arrière dans sed peuvent être utilisées à la fois dans une expression régulière et dans la partie de remplacement de la commande de substitution.

Exemple 1 :Obtenir uniquement le premier chemin de chaque ligne

$ sed 's/\(\/[^:]*\).*/\1/g' path.txt
/usr/kbos/bin
/usr/local/sbin
/opt/omni/lbin

Dans l'exemple ci-dessus, \(\/[^:]*\) correspond au chemin disponible avant le premier :arrive. \1 remplace le premier groupe correspondant.

Exemple 2 :Multigroupement

Dans le fichier path.txt changez l'ordre des champs dans la dernière ligne du fichier.

$ sed '$s@\([^:]*\):\([^:]*\):\([^:]*\)@\3:\2:\1@g' path.txt
/usr/kbos/bin:/usr/local/bin:/usr/jbin:/usr/bin:/usr/sas/bin
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/omni/bin:
/root/bin:/opt/omni/sbin:/opt/omni/lbin

Dans la commande ci-dessus, $ spécifie que la substitution ne doit se produire que pour la dernière ligne. La sortie montre que l'ordre des valeurs de chemin dans la dernière ligne a été inversé.

Exemple 3 :Obtenir la liste des noms d'utilisateur dans le fichier /etc/passwd

Cet exemple sed affiche uniquement le premier champ du fichier /etc/passwd.

$sed 's/\([^:]*\).*/\1/' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown

Exemple 4 :Entre parenthèses le premier caractère de chaque mot

Cet exemple sed imprime le premier caractère de chaque mot entre parenthèses.

$ echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'
(W)elcome (T)o (T)he (G)eek (S)tuff

Exemple 5 :Commifiez le nombre simple.

Créons un fichier appelé numéros contenant une liste de numéros. L'exemple de commande sed ci-dessous est utilisé pour valider les nombres jusqu'à des milliers.

$ cat  numbers
1234
12121
3434
123

$sed 's/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g' numbers
1,234
12,121
3,434
123

Linux
  1. Tutoriel Unix Sed :comment exécuter plusieurs commandes Sed

  2. UNIX / Linux :10 exemples de commandes Netstat

  3. 10 exemples de commandes Xargs sous Linux / UNIX

  4. Exemples de commandes sed sous Linux

  5. Substitution de variable d'environnement dans sed

Tutoriel Unix Sed :comment écrire dans un fichier à l'aide de Sed

Tutoriel Unix Sed :ajouter, insérer, remplacer et compter les lignes de fichiers

Tutoriel Unix Sed :6 exemples d'opération de branchement Sed

Tutoriel Unix Sed :7 exemples d'opérations Sed Hold et Pattern Buffer

Tutoriel Ping :15 exemples de commandes Ping efficaces

Tutoriel Unix Sed :Opération de fichiers multilignes avec 6 exemples pratiques