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.,
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 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 #’s
pas 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
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:
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
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
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
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 représente le début de chaque ligne jusqu’à la virgule.,
- 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
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:
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:
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é?,