Commande Linux sed

Linux 命令大全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 !

Linux 命令大全Référence complète des commandes Linux

Autres extensions