Commande Linux sed
Référence complète des commandes Linux
La commande sed de Linux utilise des scripts pour traiter des fichiers texte.
sed peut traiter et modifier des fichiers texte selon les instructions du script.
Sed est principalement utilisé pour modifier automatiquement un ou plusieurs fichiers, simplifier les opérations répétées sur les fichiers, écrire des programmes de conversion, etc.
Syntaxe
sed [-hnV][-e<script>][-f<script文件>][文本文件]
Description du paramètre:
- -e<script> ou --expression=<script> Utilisez le script spécifié dans l'option pour traiter le fichier texte d'entrée.
- -f<script file> ou --file=<script file> Utilisez le fichier de script spécifié dans l'option pour traiter le fichier texte d'entrée.
- -h ou --help Afficher l'aide.
- -n ou --quiet ou --silent Afficher uniquement le résultat après le traitement du script.
- -V ou --version Afficher les informations de version.
Description de l'action:
- a : Ajouter. Des chaînes peuvent suivre a, et ces chaînes apparaîtront sur une nouvelle ligne (la ligne suivante après la ligne actuelle)~
- c : Remplacer. Des chaînes peuvent suivre c, et ces chaînes peuvent remplacer les lignes entre n1 et n2 !
- d : Supprimer. Comme il s'agit d'une suppression, d n'est généralement suivi de rien ;
- i : Insérer. Des chaînes peuvent suivre i, et ces chaînes apparaîtront sur une nouvelle ligne (la ligne précédant la ligne actuelle) ;
- p : Imprimer, c'est-à-dire imprimer les données sélectionnées. Généralement, p est utilisé avec le paramètre sed -n~
- s : Remplacer. Cela peut effectuer directement le remplacement ! Généralement, l'action s peut être utilisée avec des expressions régulières ! Par exemple, 1,20s/old/new/g !
Exemples
Créons d'abord un fichiertestfileavec le contenu suivant :
$ cat testfile #查看testfile 中的内容 HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test Google Taobao Example Tesetfile Wiki
Danstestfile, ajoutez une ligne après la quatrième ligne du fichier et affichez le résultat sur la sortie standard. Saisissez la commande suivante à l'invite de commande :
sed -e 4a\newLine testfile
En utilisantsed, après la commande, la sortie est la suivante :
$ sed -e 4a\newLine testfile HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test newLine Google Taobao Example Tesetfile Wiki
Ajout/Suppression par ligne
va lister le contenu detestfileet afficher les numéros de ligne. De plus, veuillez supprimer les lignes 2~5 !
$ nl testfile | sed '2,5d'
1 HELLO LINUX!
6 Taobao
7 Example
8 Tesetfile
9 Wiki
l'action de sed est2,5d, ce quidsignifie supprimer. Comme les lignes 2-5 sont supprimées, les données affichées ne contiennent plus les lignes 2-5. De plus, à l'origine, vous devriez utiliser sed -e, mais cela fonctionne aussi sans -e. Notez aussi que l'action qui suit sed doit être entourée de'...'deux guillemets simples !
Pour supprimer uniquement la ligne 2 :
$ nl testfile | sed '2d'
1 HELLO LINUX!
3 This is a linux testfile!
4 Linux test
5 Google
6 Taobao
7 Example
8 Tesetfile
9 Wiki
Pour supprimer les lignes 3 jusqu'à la dernière ligne :
$ nl testfile | sed '3,$d'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
Après la deuxième ligne (c'est-à-dire, ajoutée comme troisième ligne), ajoutezboire du thé ?le texte suivant :
$ nl testfile | sed '2a drink tea'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
drink tea
3 This is a linux testfile!
4 Linux test
5 Google
6 Taobao
7 Example
8 Tesetfile
9 Wiki
Si vous voulez l'ajouter avant la deuxième ligne, la commande est la suivante :
$ nl testfile | sed '2i drink tea'
1 HELLO LINUX!
drink tea
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
4 Linux test
5 Google
6 Taobao
7 Example
8 Tesetfile
9 Wiki
Si vous voulez ajouter plus de deux lignes, ajoutez deux lignes de texte après la deuxième ligne, par exempleBoire du thé ou .....etboire de la bière ?
$ nl testfile | sed '2a Drink tea or ......\
drink beer ?'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
Drink tea or ......
drink beer ?
3 This is a linux testfile!
4 Linux test
5 Google
6 Taobao
7 Example
8 Tesetfile
9 Wiki
Chaque ligne doit utiliser une barre oblique inversée\pour marquer une nouvelle ligne. Dans l'exemple ci-dessus, on peut voir qu'à la fin de la première ligne il y a\présent.
Remplacer et afficher par ligne
Remplacez le2-5 contenu de la ligne parNo 2-5 number?
$ nl testfile | sed '2,5c No 2-5 number'
1 HELLO LINUX!
No 2-5 number
6 Taobao
7 Example
8 Tesetfile
9 Wiki
Grâce à cette méthode, nous pouvons remplacer une ligne entière de données.
Lister uniquement les lignes 5-7 dans le testfile:
$ nl testfile | sed -n '5,7p'
5 Google
6 Taobao
7 Example
Avec la fonction d'affichage par ligne de sed, vous pouvez sélectionner et afficher certains numéros de ligne dans un fichier.
Rechercher et afficher des données
Rechercher dans testfile les lignes contenantoocomme mot-clé :
$ nl testfile | sed -n '/oo/p'
5 Google
7 Example
Si root est trouvé, en plus d'afficher toutes les lignes, la ligne correspondante sera également affichée.
Rechercher et supprimer des données
Supprimer toutes les lignes de testfile qui contiennentoo, et afficher les autres lignes
$ nl testfile | sed '/oo/d'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
4 Linux test
6 Taobao
8 Tesetfile
9 Wiki
Rechercher des données et exécuter des commandes
Rechercher dans testfile, trouver la ligne correspondant àoo, exécuter un ensemble de commandes dans les accolades, chaque commande étant séparée par des points-virgules. Ici,ooest remplacé parkk, puis afficher cette ligne :
$ nl testfile | sed -n '/oo/{s/oo/kk/;p;q}'
5 Gkkgle
La commande finaleqconsiste à quitter.
Rechercher et remplacer des données
En plus du mode de traitement de lignes entières, sed peut également rechercher et remplacer des données partielles ligne par ligne.
La recherche et le remplacement de sed sont similaires à la commandevi, et le format de la syntaxe est le suivant :
sed 's/要被取代的字串/新的字串/g'Remplacer la première occurrence de oo dans chaque ligne du testfile par la chaîne kk, puis afficher le contenu du fichier sur la sortie standard :
sed -e 's/oo/kk/' testfile
gL'option g indique une recherche et un remplacement globaux, de sorte que sed remplace toutes les chaînes correspondantes dans le fichier. Le contenu modifié est envoyé vers la sortie standard et ne modifie pas le fichier d'origine :
sed -e 's/oo/kk/g' testfile
L'optionipermet à sed de modifier le fichier :
sed -i 's/oo/kk/g' testfile
Traiter par lots les fichiers du répertoire courant qui commencent partest:
sed -i 's/oo/kk/g' ./test*
Ensuite, nous utilisons /sbin/ifconfig pour interroger l'adresse IP :
$ /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 .....(以下省略).....
L'adresse IP de cette machine est 192.168.1.100.
Supprimez la partie avant l'adresse IP :
$ /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, supprimez la partie restante, c.-à-d. :192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0。
Supprimez la partie après l'adresse IP :
$ /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' 192.168.1.100
Édition multipoint
Une seule commande sed pour supprimer les données de la ligne 3 jusqu'à la fin de testfile et remplacer HELLO par EXAMPLE :
$ nl testfile | sed -e '3,$d' -e 's/HELLO/EXAMPLE/'
1 EXAMPLE LINUX!
2 Linux is a free unix-type opterating system.
-e indique une édition multipoint. La première commande d'édition supprime les données de la ligne 3 jusqu'à la fin de testfile, et la seconde commande recherche HELLO et le remplace par EXAMPLE.
Modification directe du contenu du fichier (action dangereuse)
sed peut modifier directement le contenu des fichiers sans utiliser de commandes de pipeline ni de redirection de flux de données ! Cependant, comme cette action modifie directement le fichier original, ne la testez pas à la légère avec la configuration système ! Nous utiliserons quand même le fichier regular_express.txt pour l'essayer !
Le contenu du fichier regular_express.txt est le suivant :
$ cat regular_express.txt example. google. taobao. facebook. zhihu- weibo-
Utilisez sed pour remplacer le . final de chaque ligne de regular_express.txt par !
$ sed -i 's/\.$/\!/g' regular_express.txt $ cat regular_express.txt example! google! taobao! facebook! zhihu- weibo-:q:q
Utilisez sed pour ajouter directement à la dernière ligne de regular_express.txt :# This is a test:
$ sed -i '$a # This is a test' regular_express.txt $ cat regular_express.txt example! google! taobao! facebook! zhihu- weibo- # This is a test
Puisque $ représente la dernière ligne et que l'action a consiste à ajouter, le fichier a été complété à la fin# This is a test!
L'-ioption de sed peut modifier directement le contenu des fichiers, et cette fonctionnalité est très utile ! Par exemple, si vous avez un fichier de 1 million de lignes et que vous devez ajouter du texte à la ligne 100, utiliser vim pourrait vous rendre fou ! Parce que le fichier est trop volumineux ! Que faire alors ? Utilisez simplement sed ! Avec la fonctionnalité de modification/remplacement directe de sed, vous n'avez même pas besoin d'utiliser vim pour éditer !
Autres extensions