Maison > Article > Opération et maintenance > Comprendre la commande sed de l'un des trois mousquetaires de la programmation Shell en un seul article
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 '/.*inet/p' 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 '/.*inet/p' | sed 's/.*inet\s\+//g' 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 '/.*inet/p' | sed 's/.*inet\s\+//g' | sed 's/\s\+.*//g' 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('beijing')"><font color="red">北京</font></a> <a href=http://shanghai.hellozx.com onclick="co('shanghai')"><font color="red">上海</font></a> <a href=http://tianjin.hellozx.com onclick="co('tianjin')"><font color="red">天津</font></a> <a href=http://chongqing.hellozx.com onclick="co('chongqing')"><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('jinan')"><font color=red style="font-size:14px;">济南</font></a> <a href="http://qingdao.hellozx.com" onclick="co('qingdao')"><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 '/http:/p' 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 '/http:/p' a.txt | sed 's/.*http:\/\///g'
, puis supprimez tous les guillemets doubles et les caractères qui le suivent
# sed -n '/http:/p' 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!