GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment enregistrer le modèle correspondant dans une variable à l'aide de la commande "sed" ?

J'essaie de trouver un modèle en utilisant sed commande dans file.txt entre le premier car1 et char2 puis remplacez-le par une chaîne. comme ci-dessous avec echo exemple de mode :

echo "This X is test Y. But X is not test Y." | sed 's/X[^Y]*Y/REPLACE/'

J'ai aussi besoin de sauvegarder le modèle correspondant (comme is test {<–les espaces autour sont importants} ) dans une variable.

Réponse acceptée :

Voici une seule invocation de sed qui écrit la ligne révisée sur stdout tout en enregistrant le texte supprimé dans la variable shell var :

$ var=$(echo "This X is test Y. But X is not test Y." | sed -nr 'h;s/[^X]*X([^Y]*)Y.*/\1/;p;x;s/X[^Y]*Y/REPLACE/;w /dev/stderr') 2>&1
This REPLACE. But X is not test Y.

La valeur de var est :

$ echo "==$var=="
== is test ==

Explication :

  • h

    Cette commande copie le motif actuel dans l'espace de maintien.

  • s/[^X]*X([^Y]*)Y.*/\1/;p

    Cela supprime tout de l'espace de modèle sauf le texte entre le premier X et Y y compris tous les espaces. Ceci est ensuite imprimé sur stdout. C'est la sortie qui est capturée par le shell et assignée à var .

  • x

    Cela recopie l'espace de maintien dans l'espace de motif. Lorsque cela est fait, l'espace de modèle contient une copie de la ligne d'entrée d'origine.

  • s/X[^Y]*Y/REPLACE/; w /dev/stderr

    La substitution est effectuée et le résultat est écrit dans stderr .

  • 2>&1

    Une fois que le shell a capturé stdout dans var , cela indique au shell de copier stderr (qui a la ligne avec REPLACE) dans stdout.

A part le traitement de la variable var

La variable var comprend les espaces de début et de fin. Si le shell devait subséquemment soumettre var au fractionnement des mots, ces espaces seraient supprimés. Pour éviter cela, lorsque var est référencé, faites-le entre guillemets doubles, comme dans l'exemple ci-dessus.


Ubuntu
  1. Comment affecter la sortie d'une commande Linux à une variable

  2. Comment enregistrer la sortie de la commande dans un fichier sous Linux

  3. Comment exécuter une commande stockée dans une variable ?

  4. Comment démarrer Anydesk dans Ubuntu à l'aide de l'invite de commande ?

  5. Comment restaurer la base de données MySQL à l'aide de la commande en SSH ?

Comment redémarrer Debian en utilisant la ligne de commande

Comment créer un fichier sous Linux à l'aide de Terminal

Comment créer un fichier dans Ubuntu Linux à l'aide de la commande et de l'interface graphique

Comment mettre à niveau Ubuntu 16.04 LTS vers 20.04 LTS à l'aide du terminal de commande

Comment copier des fichiers sous Linux à l'aide de la commande CP

Comment utiliser la commande nmap