Cet article fait partie de la série de didacticiels sur la commande Unix sed en cours. Dans nos articles précédents, nous avons appris sed avec des commandes uniques :impression, suppression, substitution et écriture de fichier.
Sed fournit de nombreuses commandes pour effectuer un certain nombre d'opérations avec les lignes d'un fichier.
Dans cet article, voyons comment ajouter, insérer, remplacer une ligne dans un fichier et comment obtenir les numéros de ligne d'un fichier.
- Ajouter des lignes
- Insérer des lignes
- Remplacer les lignes
- Compter les lignes
Créons d'abord le fichier geekstuff.txt qui sera utilisé dans tous les exemples mentionnés ci-dessous.
$cat thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Ajouter des lignes à l'aide de la commande Sed
Sed fournit la commande "a" qui ajoute une ligne après chaque ligne avec l'adresse ou le modèle.
Syntax: #sed 'ADDRESS a\ Line which you want to append' filename #sed '/PATTERN/ a\ Line which you want to append' filename
Sed Append Example 1. Ajouter une ligne après la 3ème ligne du fichier.
Ajoutez la ligne "Gadgets et sites Web sympas" après la 3ème ligne. La commande sed "a" insère la ligne après la correspondance.
$ sed '3 a\ > Cool gadgets and websites' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Cool gadgets and websites Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Append Example 2. Ajouter une ligne après chaque ligne correspondant au modèle
La commande sed ci-dessous ajoutera la ligne "Linux Scripting" après chaque ligne correspondant au modèle "Sysadmin".
$ sed '/Sysadmin/a \ > Linux Scripting' thegeekstuff.txt Linux Sysadmin Linux Scripting Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc. Linux Scripting
Sed Append Example 3. Ajouter une ligne à la fin du fichier
L'exemple suivant, ajoute la ligne "Website Design" à la fin du fichier.
$ sed '$ a\ > Website Design' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc. Website Design
Insérer des lignes à l'aide de la commande Sed
La commande Sed "i" est utilisée pour insérer une ligne avant chaque ligne avec la plage ou le motif.
Syntax: #sed 'ADDRESS i\ Line which you want to insert' filename #sed '/PATTERN/ i\ Line which you want to insert' filename
Sed Insert Example 1. Ajouter une ligne avant la 4ème ligne de la ligne.
Ajoutez une ligne "Gadgets et sites Web sympas" avant la 4ème ligne. La commande "a" insère la ligne après la correspondance alors que "i" insère avant la correspondance.
$ sed '4 i\ > Cool gadgets and websites' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Cool gadgets and websites Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Insert Example 2. Insérer une ligne avant chaque ligne avec le motif
La commande sed ci-dessous ajoutera une ligne "Linux Scripting" avant chaque ligne correspondant au modèle appelé "Sysadmin".
$ sed '/Sysadmin/i \ > Linux Scripting' thegeekstuff.txt Linux Scripting Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Linux Scripting Windows- Sysadmin, reboot etc.
Sed Insert Example 3. Insérer une ligne avant la dernière ligne du fichier.
Ajoutez une ligne "Conception de site Web" avant la dernière ligne du fichier.
$ sed '$ i\ > Website Design' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Website Design Windows- Sysadmin, reboot etc.
Remplacer les lignes à l'aide de la commande Sed
La commande "c" dans sed est utilisée pour remplacer toutes les correspondances de ligne avec le modèle ou les plages avec la nouvelle ligne donnée.
Syntax: #sed 'ADDRESS c\ new line' filename #sed '/PATTERN/ c\ new line' filename
Sed Replace Example 1. Remplacer une première ligne du fichier
La commande ci-dessous remplace la première ligne du fichier par "The Geek Stuff".
$ sed '1 c\ > The Geek Stuff' thegeekstuff.txt The Geek Stuff Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Replace Example 2. Remplacer une ligne qui correspond au modèle
Remplacez toutes les lignes qui ont un modèle "Linux Sysadmin" par "Linux Sysadmin - Scripting".
$ sed '/Linux Sysadmin/c \ > Linux Sysadmin - Scripting' thegeekstuff.txt Linux Sysadmin - Scripting Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Windows- Sysadmin, reboot etc.
Sed Replace Example 3. Remplacer la dernière ligne du fichier
La commande Sed donnée ci-dessous remplace la dernière ligne du fichier par "Dernière ligne du fichier".
$ sed '$ c\ > Last line of the file' thegeekstuff.txt Linux Sysadmin Databases - Oracle, mySQL etc. Security (Firewall, Network, Online Security etc) Storage in Linux Productivity (Too many technologies to explore, not much time available) Last line of the file
Imprimer les numéros de ligne à l'aide de la commande Sed
"=" est une commande dans sed pour imprimer le numéro de ligne actuel sur la sortie standard.
Syntax: #sed '=' filename
La syntaxe de la commande d'envoi ci-dessus imprime le numéro de ligne sur la première ligne et la ligne d'origine du fichier sur la ligne suivante.
La commande sed '=' n'accepte qu'une seule adresse, donc si vous voulez imprimer le numéro de ligne pour une plage de lignes, vous devez utiliser les accolades.
Syntax: # sed -n '/PATTERN/,/PATTERN/ { = p }' filename
Sed Line Number Example 1. Trouvez le numéro de ligne qui contient le motif
La commande sed ci-dessous imprime le numéro de ligne correspondant au modèle "Bases de données"
$ sed -n '/Databases/=' thegeekstuff.txt 2
Exemple de numéro de ligne Sed 2. Impression de la plage de numéros de ligne
Imprimez les numéros de ligne pour les correspondances de lignes du modèle "Oracle" à "Productivité".
$ sed -n '/Oracle/,/Productivity/{ > = > p > }' thegeekstuff.txt 2 Databases - Oracle, mySQL etc. 3 Security (Firewall, Network, Online Security etc) 4 Storage in Linux 5 Productivity (Too many technologies to explore, not much time available)
Sed Line Number Example 3. Imprimer le nombre total de lignes dans un fichier
Le numéro de ligne de la dernière ligne du fichier sera le nombre total de lignes dans un fichier. Le motif $ spécifie la dernière ligne du fichier.
$ sed -n '$=' thegeekstuff.txt 6