J'en ai vu beaucoup sed
ces derniers temps, et je trouve que c'est une commande assez déroutante. Les pages de manuel n'étaient pas particulièrement utiles, mais je sais qu'elles peuvent être utilisées pour analyser la sortie d'autres commandes.
Qu'est-ce que c'est exactement sed
et quelles sont ses utilisations? Je suis à la recherche d'une réponse complète couvrant ce qui sed
est, à quoi il sert couramment et quelques exemples de base / syntaxe.
command-line
sed
Seth
la source
la source
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
info sed
a beaucoup plus queman sed
. Puis,/usr/share/doc/sed
dedans, il y asedfaq.txt.gz
.Réponses:
Dans l'utilisation de base, il est utilisé pour «rechercher et remplacer» par des chaînes.
echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'
Retour
"The quick brown fox jumps over the lazy cat"
Sed brille vraiment lorsque des expressions régulières sont utilisées avec.
Vous voudrez peut-être jeter un œil à cet article sur
sed
, son assez complet.la source
Définitions
Unix System V: un guide pratique , livre de Mark Sobell:
Page de manuel pour sed (GNU sed) 4.2.2:
Ma définition informelle:
Sed
(abréviation de stream editor ) est un utilitaire de traitement de texte qui a été développé au moment où le texte était traité ligne par ligne, mais qui reste l'un des utilitaires Unix / Linux les plus puissants; en même temps, c'est une forme de langage de script, spécialement conçu pour le traitement de texte.Les usages
Comme le suggèrent les définitions,
sed
est utilisé pour le traitement par lots des lignes de texte, des fichiers texte et des flux de texte canalisés. Le plus souvent, il est utilisé pour remplacer ou supprimer du texte:Cependant, il peut également être utilisé pour imiter le comportement d'autres commandes. Par exemple,
dmesg | head -n 3
(imprimer les 3 premières lignes), nous pouvons le fairedmesg | sed -n 1,3p
.dmesg | grep 'wlan0'
(chercher une chaîne), on peut fairedmesg | sed -n '/wlan0/p'
Le grand avantage qui
sed
a sur les autres utilitaires de traitement de texte est le-i
drapeau, ce qui signifie que nous ne pouvons pas simplement afficher le texte modifié à l'écran, mais enregistrer réellement la modification dans le fichier d'origine.awk
les saveurs, en revanche, n'ont qu'une telle fonctionnalité dans laGNU awk
version.sed
peut prendre des entrées sur la ligne de commande, avec plusieurs modèles séparés par un point-virgule (;
) ou à partir d'un fichier de script spécifié après l'-f
indicateur, par exemplecat someTextfile.txt | sed -f myScript.sed
Applications et exemples Sed
Sed one-liners
Manipulation de texte avec sed, Linux Journal
sed - 20 exemples pour supprimer / supprimer des caractères d'un fichier
Script Sed - Inverser les noms
Comment puis-je remplacer une chaîne dans un ou plusieurs fichiers?
Comment puis-je supprimer toutes les deux lignes d'un fichier?
la source
sed
est une commande puissante qui vous permet de faire des choses (supprimer des lignes, substitution de chaînes, filtrage de chaînes, etc.).Je pourrais vous donner une liste d'utilisations avec args mais Internet en est rempli. La recherche
sed usage by examples
m'apporte beaucoup de résultats, le mignon: http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/la source
Cette réponse est un travail en cours - il manque plus d'exemples sur la commande susbstitute
Qu'est-ce que c'est
sed
?sed
= Stream EDitorLa description dans la page de manuel pour les
sed
rapports GNU 4.2.2:La description de la page GNU
sed
sur gnu.org rapporte:À quoi
sed
sert-il?Il peut être utilisé pour effectuer des modifications complexes de flux de données (généralement du texte, mais il peut également être utilisé pour modifier des données binaires).
Parmi les cas d'utilisation les plus courants, il y a:
Ce sont les cas d'utilisation couverts par cette réponse.
Usage
sed
lit l'entrée à partir d'un fichier stocké dans le système de fichiers si un nom de fichier est spécifié dans les arguments de la ligne de commande lors de son appel, ou depuisstdin
si aucun nom de fichier n'est spécifié.Invocation minimale à l'aide d'un fichier stocké dans le système de fichiers:
Invocation minimale en utilisant
stdin
:Bonjour le monde!
sed
lit par défaut le fichier d'entrée ligne par ligne; il lit une ligne, il supprime la nouvelle ligne de fin de la ligne et place la ligne traitée dans un "espace modèle"; enfin, il exécute les commandes répertoriées sur le contenu actuel de l'espace de motif et lit une nouvelle ligne dans le fichier d'entrée.Lorsqu'aucune commande n'est spécifiée ou lorsqu'une
p
ou uned
commande est spécifiée *,sed
imprime toujours le contenu actuel de l'espace de motif suivi d'une nouvelle ligne à chaque itération, indépendamment:Pour éviter cela, celui-ci peut être appelé
sed
avec le-n
commutateur:* Ne parlant que pour les commandes
p
,d
ets
, qui sont les commandes couvertes dans cette réponse.Sélection de lignes
sed
peut traiter l'intégralité du fichier d'entrée ou traiter uniquement les lignes sélectionnées du fichier d'entrée; la sélection des lignes du fichier d'entrée à traiter se fait en spécifiant des "adresses"; une adresse peut être (entre autres) soit un numéro de ligne, soit un motif; des plages de lignes peuvent être sélectionnées en spécifiant des plages d'adresses.Les combinaisons possibles d'adresses sont:
<N>
(où<N>
est un nombre): la ou les commandes suivantes seront exécutées uniquement sur le numéro de ligne<N>
;<N>,<M>
(où<N>
et<M>
sont deux nombres,<N>
><M>
): la ou les commandes suivantes seront exécutées sur des lignes allant du numéro<N>
de ligne au numéro de ligne<M>
inclus;/<pattern>/
(où<pattern>
est une expression régulière de base ou étendue): la ou les commandes suivantes seront exécutées uniquement sur les lignes contenant une occurrence de<pattern>
;/<pattern1>/,/<pattern2>/
(où<pattern1>
et<pattern2>
sont simples ou étendus expressions régulières): la commande suivante / commandes sont effectuées sur des lignes allant de la première ligne contenant une occurrence de<pattern1>
la ligne suivante contenant une occurrence de<pattern2>
, plusieurs fois dans le cas de multiple ordonné<pattern1>
-<pattern2>
occurences;<N>,/pattern/
(où<N>
est un nombre et<pattern>
est une expression régulière de base ou étendue): la ou les commandes suivantes seront exécutées sur des lignes allant du numéro de ligne<N>
à la première ligne contenant une occurrence de<pattern>
;/pattern/,<N>
(où<pattern>
est une expression régulière de base ou étendue et<N>
est un nombre): la ou les commandes suivantes seront exécutées sur des lignes allant de la première ligne contenant une occurrence de<pattern>
au numéro de ligne<N>
;La sélection effectuée pour imprimer, supprimer ou effectuer des substitutions sur des plages de lignes inclura toujours les lignes correspondant aux adresses spécifiées; en outre, la sélection effectuée pour imprimer, supprimer ou effectuer des substitutions sur des plages de lignes à l'aide de motifs est paresseuse et globale (c'est-à-dire que chaque plage affectée sera toujours la plus petite possible et que plusieurs plages seront affectées).
Lorsque vous imprimez des plages de lignes ou imprimez uniquement des lignes sur lesquelles une substitution a été effectuée, il est nécessaire d'appeler
sed
avec le-n
commutateur afin d'éviter que les lignes correspondant au critère soient imprimées deux fois (cela ne se produit que lors de l'impression de plages de lignes) et dans l'ordre pour éviter que les lignes ne correspondant pas au critère soient imprimées.Une sélection de lignes à traiter doit être suivie d'une commande ou de plusieurs commandes séparées par des points-virgules groupées à l'aide d'accolades.
Commandes: imprimer, supprimer
Les commandes utilisées pour imprimer ou supprimer une sélection sont respectivement:
p
: imprime des lignes correspondant à l'adresse / plage d'adresses spécifiée;d
: supprime les lignes correspondant à l'adresse / plage d'adresses spécifiée;Lorsqu'une de ces commandes n'est pas précédée d'une adresse / sélection, la commande est exécutée globalement, c'est-à-dire sur chaque ligne du fichier d'entrée.
Exemples: imprimer, supprimer
Impression / suppression de lignes spécifiant des adresses numériques:
Exemple de fichier:
<N>
:<N>
:<N>
à<M>
inclus:<N>
pour<M>
inclure:Impression / suppression de lignes spécifiant des motifs:
Exemple de fichier:
<pattern>
:<pattern>
:<pattern1>
à la correspondance de ligne<pattern2>
incluse:<pattern1>
à la correspondance de ligne<pattern2>
incluse:Commande: substitut
La commande utilisée pour effectuer une substitution sur une sélection est:
s
: remplace les lignes correspondant à l'adresse / plage d'adresses spécifiée;Lorsque cette commande n'est pas précédée d'une adresse / sélection, la commande est exécutée globalement, c'est-à-dire sur chaque ligne du fichier d'entrée.
La syntaxe de la
s
commande est:Les barres obliques sont des "délimiteurs"; ils sont utilisés pour délimiter la
<pattern>
,<replacement_string>
et des<pattern_flags>
sections;Le délimiteur est toujours le caractère suivant immédiatement la
s
commande; il peut être défini sur n'importe quel autre caractère, par exemple|
:<pattern>
est une expression régulière de base ou étendue;<replacement_string>
est une chaîne fixe qui peut inclure dessed
séquences spécifiques avec une signification spéciale;<pattern_flags>
est une liste de drapeaux qui modifient le comportement de<pattern>
.sed
Séquences spécifiques les plus courantes avec une signification particulière:&
: référence arrière remplacée par la chaîne correspondant à<pattern>
;\<N>
(où<N>
est un nombre): référence arrière remplacée par le<N>
groupe capturé dans<pattern>
;Drapeaux les plus courants:
g
: force<pattern>
à correspondre globalement, c'est-à-dire plusieurs fois dans chaque ligne;i
: force<pattern>
à faire correspondre la casse de manière insensible;p
: imprime à nouveau les lignes sur lesquelles une substitution a été effectuée (utile lorsque vous utilisez l 'invocation du-n
commutateur danssed
pour imprimer uniquement les lignes sur lesquelles une substitution a été effectuée);Exemples: substitut
Exemple de fichier:
<pattern>
avec<replacement_string>
sur chaque ligne:<pattern>
avec<replacement_string>
sur chaque ligne:<pattern1>
et remplaçant toutes les occurrences de<pattern2>
avec<replacement_string>
:<pattern1>
et remplacer toutes les occurrences de<pattern2>
avec<replacement_string>
:la source