Maison >Opération et maintenance >exploitation et maintenance Linux >Comprendre la commande sed de l'un des trois mousquetaires de la programmation Shell en un seul article

Comprendre la commande sed de l'un des trois mousquetaires de la programmation Shell en un seul article

齐天大圣
齐天大圣original
2020-09-17 17:27:451795parcourir

En tant que l'un des trois épéistes de la programmation shell, l'importance de sed va de soi. sed est un programmeur de flux qui traite une ligne à la fois, puis traite la ligne suivante après le traitement. Il prend en charge les expressions régulières et est très puissant. Cependant, sed est plus compliqué que les commandes ordinaires et propose de nombreuses options pour être maîtrisé. Jetons un coup d'œil au rôle de cette puissante commande sed à travers de nombreux exemples !

Format de syntaxe : sed [option] [action]

Les options couramment utilisées sont les suivantes :

  • -n : sed est par défaut Sortie de tout le contenu stdin, mais avec cette option, seules les lignes traitées par sed seront affichées.

  • -e : Autoriser l'exécution de plusieurs actions sur la même ligne

  • -f : Lire les actions d'un fichier

  • -i : Modifier le fichier directement au lieu de le saisir à l'écran (dangereux)

Il y a trop de paramètres dans l'action, listez-les ci-dessous :

  • a : Ajouter une ligne en dessous de la ligne correspondante

  • c : Modifier la ligne correspondante avec un nouveau contenu

  • d : Supprimer les lignes correspondantes

  • i : Ajouter du contenu avant les lignes correspondantes

  • p : Imprimer

  • s : Remplacer le contenu des lignes correspondantes

Exemple 1 : Imprimer les lignes 5 à 10 du fichier /etc/passwd

# sed -n '5,10p' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

Exemple 2 : Supprimer la ligne 2, les lignes 2 à 10 du fichier /etc/passwd

# cat -n /etc/passwd | sed '2d' | sed '5,10d'

En plus de ce qui précède méthode , nous pouvons également utiliser l'option -e pour compléter

# cat -n /etc/passwd | sed -e '2d' -e '5,10d'

Exemple 3 : Obtenir l'adresse IP du serveur

Ce cas est très bon , je le recommande à tout le monde Regardez de plus près

# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255
        ether 00:16:3e:0a:01:ad  txqueuelen 1000  (Ethernet)
……

Ce dont nous avons besoin c'est du 172.26.9.143.

La première étape consiste à obtenir la ligne que nous voulons traiter

# ifconfig eth0 | sed -n &#39;/.*inet/p&#39;
        inet 172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255

La deuxième étape consiste à remplacer les informations inutiles par des caractères vides

# ifconfig eth0 | sed -n &#39;/.*inet/p&#39; | sed &#39;s/.*inet\s\+//g&#39;
172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255

Ensuite, mettez l'adresse IP Laissez simplement tous les bits de remplacement suivants vides

# ifconfig eth0 | sed -n &#39;/.*inet/p&#39; | sed &#39;s/.*inet\s\+//g&#39; | sed &#39;s/\s\+.*//g&#39;
172.26.9.143

Parlons de l'exemple ci-dessus. Tout d'abord, dans la première étape, nous utilisons -n et p pour obtenir les lignes souhaitées. Ensuite, nous filtrons les informations inutiles. Il convient de noter que s+ dans l'expression régulière signifie correspondre à au moins un espace, mais ici, vous devez utiliser un caractère d'échappement avant le signe plus.

Exemple 4

Pour le dernier exemple, je vais vous donner un cas réel d'hier. L'exigence est la suivante : obtenez l'adresse URL dans un morceau de texte, mais le http:// précédent n'est pas nécessaire. Une partie du contenu du texte est la suivante :

  <td width=820> <a href=http://beijing.hellozx.com onclick="co(&#39;beijing&#39;)"><font color="red">北京</font></a>
     <a href=http://shanghai.hellozx.com onclick="co(&#39;shanghai&#39;)"><font color="red">上海</font></a>
     <a href=http://tianjin.hellozx.com onclick="co(&#39;tianjin&#39;)"><font color="red">天津</font></a>
     <a href=http://chongqing.hellozx.com onclick="co(&#39;chongqing&#39;)"><font color="red">重庆</font></a></td></tr>
<tr><td width=80 height=30 align=right>
<b><font style="font-size:14px;">山东</font>:</b> </td><td width=820>
 <a href="http://jinan.hellozx.com" onclick="co(&#39;jinan&#39;)"><font color=red style="font-size:14px;">济南</font></a>
 <a href="http://qingdao.hellozx.com" onclick="co(&#39;qingdao&#39;)"><font color=red style="font-size:14px;">青岛</font></a>

Complétons cette exigence en plusieurs étapes. Tout d'abord, filtrons toutes les lignes qui ne contiennent pas d'adresses URL

# sed -n &#39;/http:/p&#39; a.txt

Ensuite, remplaçons toutes les informations inutiles. Caractères vides. sont suffisants. Supprimez d'abord http:// et tous les caractères qui le précèdent

sed -n &#39;/http:/p&#39; a.txt | sed &#39;s/.*http:\/\///g&#39;

, puis supprimez tous les guillemets doubles et les caractères qui le suivent

# sed -n &#39;/http:/p&#39; a.txt | sed 's/.*http:\/\///g' | sed 's/".*//g'

Maintenant, la sortie à l'écran est la suivante

haikou.hellozx.com sanya.hellozx.com kunming.hellozx.com dali.hellozx.com xining.hellozx.com yinchuan.hellozx.com wulumuqi.hellozx.com ……

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn