SED - lignes non communiquées dans un fichier texte
- 3575
- 678
- Thomas Richard
Sed, court pour «Éditeur de flux», est un puissant outil de traitement du texte qui est couramment utilisé dans les systèmes Linux et Unix. Il peut effectuer un large éventail d'opérations sur les fichiers texte, y compris la recherche, le remplacement, l'insertion et la suppression des lignes. Une tâche courante que les utilisateurs doivent souvent effectuer avec SED sont les lignes non comménantes dans un fichier texte. Dans cet article, nous fournirons un guide pour maîtriser le SED et l'utiliser sur des lignes non les comment dans les fichiers texte.
Avant de plonger dans les spécificités de l'utilisation."Dans la programmation, un commentaire est une ligne de code qui est ignorée par le compilateur ou l'interprète. Il est utilisé pour ajouter des notes, des explications ou d'autres informations au code sans affecter sa fonctionnalité. Les commentaires sont généralement indiqués par un caractère ou une séquence de caractères spéciaux, tels que «#» dans les scripts shell, "//" en C ++, ou «/ * * /» en Java.
Lignes d'incomment dans les fichiers texte
Pour décomiser une ligne dans un fichier texte signifie supprimer les caractères de commentaire et rendre la ligne active ou exécutable. Par exemple, considérez le script shell suivant:
#!/ bin / bash # Ceci est un commentaire # echo "Bonjour, monde!"1234 | #!/ bin / bash # Ceci est un commentaire # echo "Bonjour, monde!" |
Dans ce script, la première ligne est appelée un "case" et dit au système quel interprète utiliser pour exécuter le script. Les deuxième et troisième lignes sont des commentaires qui fournissent des informations sur le script mais ne sont pas exécutés. La quatrième ligne est la commande réelle qui imprime «Bonjour le monde!«À la console.
Si nous voulions déomiser la troisième ligne et la rendre exécutable, nous supprimerions le caractère «#» avant la commande «echo»:
#!/ bin / bash # Ceci est un commentaire écho "Bonjour, monde!"1234 | #!/ bin / bash # Ceci est un commentaire "bonjour, monde!" |
Maintenant que nous comprenons le concept de lignes non communiquées, voyons comment nous pouvons utiliser SED pour accomplir cette tâche. SED utilise des expressions régulières, ou regex, pour faire correspondre les modèles dans les fichiers texte et leur appliquer des transformations. Pour décommenter une ligne, nous devons rechercher les personnages de commentaires au début de la ligne et les supprimer.
Voici la syntaxe de base pour utiliser les lignes SED vers Uncomment dans un fichier texte:
SED 'S / ^ # //' InputFile> OutputFile1 | SED 'S / ^ # //' InputFile> OutputFile |
Décomposons cette commande:
sed
La commande sed est-elle elle-mêmes
signifie «substitut», qui est l'opération que nous voulons effectuer/ ^ # /
est le motif regex que nous voulons faire correspondre. Le caractère «^» signifie «début de la ligne» et «#» est le personnage de commentaire que nous voulons supprimer.//
est la chaîne de remplacement, qui est vide dans ce cas. Cela signifie que nous supprimons les personnages de commentaires et ne les remplaçons pas par quoi que ce soit.entrée
est le nom du fichier que nous voulons modifier>
est un opérateur de redirection qui envoie la sortie à un nouveau fichier au lieu de la consolefichier de sortie
est le nom du nouveau fichier qui contiendra la version non communiquée du fichier d'entrée
Voici un exemple de la façon dont nous utiliserions cette commande pour les lignes non commises dans un script shell:
script sed 'S / ^ # //'.sh> non.shot1 | script sed 'S / ^ # //'.sh> non.shot |
Cette commande lira le contenu de scénario.shot, retirer le "#" caractères de toutes les lignes qui commencent par eux et écrivez le résultat dans un nouveau fichier appelé non.shot.
Notez que cette commande ne supprimera que les caractères de commentaire que du début de la ligne. S'il y a des personnages de commentaires au milieu d'une ligne, ils ne seront pas affectés. Pour supprimer tous les caractères de commentaire dans un fichier, nous pouvons modifier le modèle Regex pour correspondre à toute occurrence de «#» et le supprimer:
SED 'S / # //' InputFile> OutputFile1 | SED 'S / # //' InputFile> OutputFile |
Cette commande supprimera tout "#" caractères du fichier, peu importe où ils apparaissent.
Il convient de noter que la commande SED que nous avons montrée jusqu'à présent modifiera directement le fichier d'entrée. Si vous souhaitez créer un nouveau fichier avec la version non composée du fichier d'entrée, vous pouvez utiliser le "> OutputFile" syntaxe, comme nous l'avons fait dans les exemples ci-dessus.
Si vous souhaitez modifier directement le fichier d'entrée, vous pouvez utiliser le "-je" Option, qui signifie «sur place»:
sed -i 's / ^ # //' inputfile1 | sed -i 's / ^ # //' inputfile |
Cette commande supprimera le "#" Caractères du fichier d'entrée lui-même, sans créer un nouveau fichier.
Une autre option utile dans SED est le "-E" Option, qui vous permet de spécifier plusieurs commandes SED dans une seule ligne de commande. Cela peut être pratique si vous souhaitez effectuer plusieurs transformations sur un fichier:
sed -e 's / ^ # //' -e 's / ^ * //' inputfile> outputfile1 | sed -e 's / ^ # //' -e 's / ^ * //' inputfile> outputfile |
Cette commande supprimera d'abord le "#"Les caractères de toutes les lignes qui commencent par eux, puis suppriment tous les espaces qui apparaissent au début de chaque ligne.
Conclusion
En conclusion, la maîtrise de SED est une compétence essentielle pour tout utilisateur Linux ou Unix qui travaille avec les fichiers texte. L'utilisation de SED sur des lignes non commises dans un fichier est une tâche courante qui peut être accomplie facilement avec le "S / ^ # //" commande. En combinant cette commande avec d'autres fonctionnalités SED, vous pouvez effectuer de puissantes opérations de traitement de texte sur vos fichiers et automatiser de nombreuses tâches fastidieuses.
- « Variables spéciales dans Zsh
- Utiliser AWK, BC et Expr pour effectuer des calculs mathématiques dans Bash »