commande sed Linux
commande sed Linux est d'utiliser le script pour traiter des fichiers texte.
le script sed peut être en conformité avec les instructions pour gérer, éditer des fichiers texte.
Sed est principalement utilisé pour modifier automatiquement un ou plusieurs fichiers, simplifier le fonctionnement répété du document, les procédures de conversion écrites.
grammaire
sed [-hnV][-e<script>][-f<script文件>][文本文件]
Description Paramètre:
- -e <script> ou --expression = <script> spécifié dans le script avec l'option pour traiter le fichier de saisie de texte.
- -f <fichier script> ou --file = <fichier script> option pour spécifier le fichier de script pour traiter le fichier de saisie de texte.
- -h ou --help affiche aider.
- -n script ou --quiet ou --silent montre les résultats après le traitement seulement.
- -V --version Ou informations sur la version d'affichage.
Action Description:
- a: nouveau, peut reprendre une chaîne, et ces chaînes apparaîtront (actuellement la ligne suivante) sur une nouvelle ligne -
- c: remplacer, c arrière peut alors string ces chaînes peut remplacer n1, n2 ligne entre les deux!
- d: supprimer, supprimer parce qu'il est ah, donc généralement pas accepter tout livre d tard;
- i: insert, je peux ramener la chaîne, et les chaînes seront (présent sur une ligne) sur une nouvelle ligne;
- p: impression, ce sera une sélection de données d'impression. P sera généralement exécuté avec le paramètre sed -n ~
- s: substitution peut être substitué travailler directement miles! Habituellement, cette action s peut être utilisé avec des expressions régulières! Par exemple 1,20s / ancien / nouveau / g est!
Exemples
Après la quatrième ligne testfile fichier pour ajouter une ligne, et délivre les résultats à la sortie standard, entrez la commande suivante à l'invite de commande:
sed -e 4a\newLine testfile
Vérifiez d'abord testfile contenu sont les suivants:
$ cat testfile #查看testfile 中的内容 HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test
Après avoir utilisé la commande sed, les résultats de sortie sont les suivantes:
$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串 HELLO LINUX! #testfile文件原有的内容 Linux is a free unix-type opterating system. This is a linux testfile! Linux test newline
Pour ajouter des unités de comportement / Suppression
Le contenu de etc / listes / passwd et les numéros de ligne d'impression, tandis que le premier set 2-5 lignes supprimées!
[root@www ~]# nl /etc/passwd | sed '2,5d' 1 root:x:0:0:root:/root:/bin/bash 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown .....(后面省略).....
l'action sed comme «2,5d ', qui consiste à supprimer le d! Parce que les lignes 2-5 pour le supprimer, de sorte qu'aucune donnée ne soit affiché sur la ligne 2-5 Lo ~ Aussi, prendre note, est censé être libéré poissons sed -e, aucun -e fera! A noter également que le dos sed prendre des mesures, assurez-vous de '' deux apostrophes autour de Oh!
Il suffit de supprimer la deuxième rangée
nl /etc/passwd | sed '2d'
Pour supprimer la troisième à la dernière ligne
nl /etc/passwd | sed '3,$d'
Après la deuxième rangée (qui est, ajouté à la troisième rangée) plus "boire du thé? 'Words!
[root@www ~]# nl /etc/passwd | sed '2a drink tea' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin drink tea 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(后面省略).....
Mais si elle est d'être en face de la deuxième rangée
nl /etc/passwd | sed '2i drink tea'
Si vous voulez augmenter de plus de deux rangées derrière la deuxième rangée pour joindre deux lignes, comme «Buvez du thé ou ....." et "boire de la bière?"
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\ > drink beer ?' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin Drink tea or ...... drink beer ? 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin .....(后面省略).....
Doit être une barre oblique inverse "\" pour ajouter une nouvelle ligne entre chaque rangée de Oh! Ainsi, l'exemple ci-dessus, nous pouvons trouver la première ligne de la surface finale, il existe \.
Et pour remplacer les unités de l'affichage
Le contenu de 2-5 suite à la substitution "Pas de numéro 2-5" signifie?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number' 1 root:x:0:0:root:/root:/bin/bash No 2-5 number 6 sync:x:5:0:sync:/sbin:/bin/sync .....(后面省略).....
Grâce à cette méthode, nous sommes en mesure de remplacer la totalité de la ligne de données!
La première ligne indique seulement 5-7 fichier / etc / passwd dans les
[root@www ~]# nl /etc/passwd | sed -n '5,7p' 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown </p><p> 可以透过这个 sed 的以行为单位的显示功能, 就能够将某一个文件内的某些行号选择出来显示。 </p> <h3>数据的搜寻并显示</h3> <p>搜索 /etc/passwd有root关键字的行</p> <pre> nl /etc/passwd | sed '/root/p' 1 root:x:0:0:root:/root:/bin/bash 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh 3 bin:x:2:2:bin:/bin:/bin/sh 4 sys:x:3:3:sys:/dev:/bin/sh 5 sync:x:4:65534:sync:/bin:/bin/sync ....下面忽略
Si la racine se trouve, en plus de toutes les lignes de sortie, la sortie correspondra à la ligne.
Lorsque vous utilisez -n permet d'imprimer toutes les lignes de ce modèle.
nl /etc/passwd | sed -n '/root/p' 1 root:x:0:0:root:/root:/bin/bash
Rechercher et supprimer des données
Deleted / etc / passwd ligne contient la racine de toute autre sortie de ligne
nl /etc/passwd | sed '/root/d' 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh 3 bin:x:2:2:bin:/bin:/bin/sh ....下面忽略 #第一行的匹配root已经删除了
les données de recherche et d'exécuter des commandes
Trouver une ligne orientale de motif assortie, la recherche / etc / passwd, trouver la racine de la ligne correspondante, derrière la mise en œuvre des accolades dans un ensemble de commandes, séparées par des points-virgules entre chaque commande, ici pour bash remplacer blueshell, réexporter ligne:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}' 1 root:x:0:0:root:/root:/bin/blueshell
Q est la dernière sortie.
Rechercher et remplacer des données
En plus de l'ensemble du mode de traitement de ligne, sed peut aussi utiliser certaines des données en unités de recherche et de remplacement. Vi assez sensiblement similaire à la recherche sed et remplacé! Il est un peu comme ceci:
sed 's/要被取代的字串/新的字串/g'
La première observation de l'information originale, utilisez / sbin / ifconfig requête IP
[root@www ~]# /sbin/ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 .....(以下省略).....
ip Cette machine est 192.168.1.100.
La partie avant de l'IP à supprimer
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
Ensuite, il est de supprimer une partie du suivi, à savoir: 192.168.1.100 Bcast: Mask 192.168.1.255: 255.255.255.0
La partie de l'IP à supprimer plus tard
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 192.168.1.100
Multi-Edition
Une commande sed pour supprimer la troisième ligne / etc / passwd à la fin des données, et le bash remplacer blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' 1 root:x:0:0:root:/root:/bin/blueshell 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
-e représente l'édition multi-point, la commande d'abord modifier les suppressions / etc / passwd pour les données à la fin de la troisième ligne, la deuxième commande recherche bash remplacé blueshell.
Directement modifier le contenu du fichier (mouvements dangereux)
sed peut modifier directement le contenu du fichier, ne pas utiliser le tuyau de commande ou des flux de données redirigent! Toutefois, étant donné que cette action sera de modifier directement le fichier d'origine, de sorte que vous ne prenez pas la configuration du système à tester! Nous utilisons encore le fichier téléchargé pour tester regular_express.txt voir!
Utilisez sed à chaque extrémité de la ligne si elle est dans regular_express.txt. Est remplacé!
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
Utilisez sed directement dans la dernière ligne regular_express.txt "# Ceci est un test."
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
Étant donné que le $ représente la dernière ligne, et une nouvelle action est, de sorte que le document final pour ajouter "# Ceci est un test!"
sed l'option "-i" pour modifier directement le contenu du fichier, ce qui est très utile! Par exemple, si vous avez un million de lignes de fichiers que vous souhaitez ajouter une certaine ligne de texte 100, cette fois en utilisant vim peut être fou! Parce que le fichier est trop grand! Comment faire cela? Sed sur l'utilisation ah! Grâce à sed directement modifier / remplacer la fonction, vous ne même pas utiliser vim à modifier!