15 trucs et astuces de commande » sed  » utiles pour les tâches quotidiennes d’Administration du système Linux

chaque administrateur système doit traiter quotidiennement des fichiers en texte brut. Savoir comment afficher certaines sections, Comment remplacer des mots et comment filtrer le contenu de ces fichiers sont des compétences que vous devez avoir à portée de main sans avoir à faire une recherche Google.,

15 trucs et astuces de commande ‘sed’ utiles pour Linux

dans cet article, nous allons passer en revue sed, l’éditeur de flux bien connu, et partager 15 conseils pour l’utiliser dans l’ordre pour atteindre les objectifs mentionnés précédemment, et plus encore.

l’Affichage d’une gamme de lignes d’un document

des Outils tels que la tête et la queue de nous permettre de visualiser le bas ou le haut d’un fichier. Et si nous avons besoin de voir une section au milieu? Le sed one-liner suivant renverra les lignes 5 à 10 de myfile.,txt:

# sed -n '5,10p' myfile.txt

affichage du fichier entier sauf une plage donnée

d’autre part, il est possible que vous souhaitiez imprimer le fichier entier sauf une certaine plage. Pour exclure les lignes 20 à 35 de mon fichier.txt, do:

# sed '20,35d' myfile.txt

affichage de lignes et de plages non consécutives

Il est possible que vous soyez intéressé par un ensemble de lignes non consécutives ou par plusieurs plages. Affichons les lignes 5-7 et 10-13 de myfile.,txt:

# sed -n -e '5,7p' -e '10,13p' myfile.txt

Comme vous pouvez le voir, la balise -e option nous permet d’exécuter une action donnée (dans ce cas, les lignes d’impression) pour chaque gamme.

remplacer des mots ou des caractères (substitution de base)

Pour remplacer chaque instance du motversion parstory dans mon fichier.,ip route show et un pipeline:

# ip route show | sed 's/ */ /g'

comparez la sortie de ip route show avec et sans le pipeline:

remplacer des mots ou des caractères dans le fichier

remplacer des mots ou des caractères dans une plage

Si vous souhaitez remplacer des mots uniquement dans une plage de lignes (30 à 40, par exemple), vous pouvez faire:

# sed '30,40 s/version/story/g' myfile.txt

bien sûr, vous pouvez indiquer une seule ligne à travers son numéro correspondant au lieu d’une plage.,

utilisation d’expressions régulières (substitution avancée) – I

parfois, les fichiers de configuration sont chargés de commentaires. Tout cela est certainement utile, il peut être utile d’afficher uniquement les directives de configuration parfois, si vous souhaitez les voir en un coup d’œil.

pour supprimer les lignes vides ou celles commençant par # du fichier de configuration Apache, faites:

# sed '/^#\|^$\| *#/d' httpd.conf

le signe caret suivi du signe numérique (^#) indique le début d’une ligne, tandis que ^$ représente des lignes vides., Les barres verticales indiquent des opérations booléennes, tandis que la barre oblique arrière est utilisée pour échapper aux barres verticales.

dans ce cas particulier, le fichier de configuration Apache a des lignes avec #’spas au début de certaines lignes, donc *# est également utilisé pour les supprimer.

utilisation d’expressions régulières (substitution Avancée) – II

Pour remplacer un mot commençant par une majuscule ou une minuscule par un autre mot, nous pouvons également utiliser sed. Pour illustrer, remplacons le mot zip ou Zip par rar dans myfile.,txt:

# sed 's/ip/rar/g' myfile.txt

ne manquez pas: utilisez Awk avec des Expressions régulières pour filtrer le texte dans les fichiers

affichage des lignes contenant un motif donné

Une autre utilisation de sed consiste à imprimer les lignes d’un fichier qui correspondent à une expression régulière donnée. Par exemple, nous pourrions être intéressés à consulter les activités d’autorisation et d’authentification qui ont eu lieu le 2 juillet, conformément au journal /var/log/secure dans un serveur CentOS 7.,

Dans ce cas, le modèle de recherche pour est Juil 2 au début de chaque ligne:

# sed -n '/^Jul 1/ p' /var/log/secure
Afficher les Journaux (Lignes) de Date Particulière

l’Insertion d’espaces dans les fichiers

Avec sed, nous pouvons également insérer des espaces (les lignes vides) pour chaque ligne non vide dans un fichier., Pour insérer une ligne vide toutes les autres lignes dans LICENSE, un fichier texte brut, faites:

# sed G myfile.txt

pour insérer deux lignes vides, faites:

# sed 'G;G' myfile.txt

ajoutez un G majuscule séparé par un point-virgule Si vous souhaitez ajouter plus de lignes vides. L’image suivante illustre l’exemple décrit dans cette astuce:

Insérer des Espaces dans le Fichier

Cette astuce peut être utile si vous souhaitez examiner un grand fichier de configuration., L’insertion d’un espace vide toutes les autres lignes et la tuyauterie de la sortie à moins se traduira par une expérience de lecture plus conviviale.

émulation de dos2unix avec édition en ligne

le programme dos2unix convertit les fichiers texte brut du formatage Windows/Mac vers Unix / Linux, supprimant les caractères de nouvelle ligne cachés insérés par certains éditeurs de texte utilisés dans ces plates-formes. S’il n’est pas installé dans votre système Linux, vous pouvez imiter ses fonctionnalités avec sed au lieu de l’installer.,

dans l’image de gauche, nous pouvons voir plusieurs caractères de retour à la ligne DOS (^M), qui ont ensuite été supprimés avec:

# sed -i 's/\r//' myfile.txt
Covert fichiers texte de Windows vers Linux

veuillez noter que l’option -i indique l’édition sur place. Ensuite, les changements ne seront pas retournés à l’écran, mais seront enregistrées dans le fichier.,

Remarque: Vous pouvez insérer des caractères de retour à la ligne DOS lors de l’édition d’un fichier dans l’éditeur vim avec Ctrl+V Et Ctrl+M.

l’édition et la sauvegarde du fichier original

l’astuce précédente, nous avons utilisé sed pour modifier un fichier, mais n’enregistrez pas le fichier d’origine. C’est parfois une bonne idée d’enregistrer une copie de sauvegarde du fichier d’origine, juste au cas où.

pour ce faire, indiquez un suffixe suivant l’option-i (entre guillemets simples) à utiliser pour renommer le fichier d’origine.,

dans l’exemple suivant, nous remplacerons toutes les instances de ceci ou ceci (en ignorant le cas) par cela dans myfile.txt, et nous allons enregistrer le fichier d’origine que myfile.txt.orig.

enfin, nous utiliserons l’utilitaire diff pour identifier les différences entre les deux fichiers:

# sed -i'.orig' 's/this/that/gi' myfile.txt
utilisez sed pour éditer et sauvegarder le fichier Original

commutation de paires de mots

supposons que vous ayez un fichier contenant les noms complets au format prénom, nom., Pour traiter correctement le fichier, vous pouvez changer de nom et de prénom.

On peut le faire avec sed assez facilement:

# sed 's/^\(.*\),\(.*\)$/\, /g' names.txt
Commutateur de Mots dans le Fichier

Dans l’image ci-dessus, nous pouvons voir que les parenthèses, étant des caractères spéciaux, besoin d’être échappé, de même que les numéros 1 et 2.

ces nombres représentent les expressions régulières en surbrillance (qui doivent apparaître entre parenthèses):

  1. 1 représente le début de chaque ligne jusqu’à la virgule.,
  2. 2 est un espace réservé pour tout ce qui est juste de la virgule à la fin de la ligne.

la sortie souhaitée est indiquée au format SecondColumn (nom de famille) + virgule + espace + FirstColumn (prénom). N’hésitez pas à changer ce que vous souhaitez.

remplacer des mots uniquement si une correspondance distincte est trouvée

remplacer parfois toutes les instances d’un mot donné, ou quelques-unes au hasard, n’est pas précisément ce dont nous avons besoin. Peut-être que nous devons effectuer le remplacement si une correspondance distincte est trouvée.,

par exemple, nous pouvons vouloir remplacer start par stop uniquement si le mot services se trouve dans la même ligne. Dans ce scénario, voici ce qui se passera:

We need to start partying at work,but let’s remember to start all services first.

dans la première ligne, start ne sera pas remplacé par stop puisque le mot services n’apparaît pas dans cette ligne, contrairement à la deuxième ligne.,

# sed '/services/ s/start/stop/g' msg.txt
Remplacer des Mots dans le Fichier

l’Exécution de deux ou plusieurs substitutions à la fois

Vous pouvez combiner deux ou plusieurs substitutions d’une seule commande sed. Remplaçons les mots that Et line dans myfile.txt avec ceci et verset, respectivement.,

notez comment cela peut être fait en utilisant une commande de substitution sed ordinaire suivie d’un point-virgule et d’une seconde commande de substitution:

# sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt

Cette astuce est illustrée dans l’image suivante:

remplacer plusieurs mots dans le fichier

combinaison de sed et d’autres commandes

bien sûr, sed peut être combiné avec d’autres outils afin de créer des commandes plus puissantes., Par exemple, utilisons l’exemple donné dans la pointe #4 et extrayons notre adresse IP de la sortie de la commande ip route.

nous allons commencer par imprimer uniquement la ligne où se trouve le motsrc. Ensuite, nous allons convertir plusieurs espaces en un seul., Enfin, nous allons couper le 9ème champ (en considérant un seul espace comme séparateur de champ), qui est l’endroit où l’adresse IP est:

# ip route show | sed -n '/src/p' | sed -e 's/ */ /g' | cut -d' ' -f9

l’image ci-dessous illustre chaque étape de la commande ci-dessus:

utres commandes

résumé

dans ce guide, nous avons partagé 15 trucs et astuces sed pour vous aider dans vos tâches quotidiennes d’administration système. Est-il une autre astuce que vous utilisez sur une base régulière et que vous aimeriez partager avec nous et le reste de la communauté?,

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *