51 votes

Combinaison de deux commandes sed

J'ai un fichier r . Je veux remplacer les mots File y MINvac.pdb avec rien. Les commandes que j'ai utilisées sont

sed -i 's/File//g' /home/kanika/standard_minimizer_prosee/r

et

sed -i 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r

Je veux combiner les deux sed des commandes en une seule, mais je ne connais pas le chemin. Quelqu'un peut-il m'aider ?

Le fichier ressemble à ceci :

-6174.27    File10MINvac.pdb
-514.451    File11MINvac.pdb
4065.68     File12MINvac.pdb
-4708.64    File13MINvac.pdb
6674.54     File14MINvac.pdb
8563.58     File15MINvac.pdb

82voto

tripleee Points 28746

sed est un langage de script. Vous séparez les commandes par un point-virgule ou une nouvelle ligne. De nombreux sites sed vous permettent également de passer chaque commande comme une commande séparée -e argument d'option.

sed -i 's/File//g;s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r

J'ai également ajouté une barre oblique inversée pour citer correctement le point littéral devant pdb mais dans ce contexte limité, cela n'a probablement pas d'importance.

Pour être complet, voici la variante avec les nouvelles lignes. Beaucoup de nouveaux venus sont déconcertés par le fait que l'interpréteur de commandes autorise les nouvelles lignes littérales dans les chaînes citées, mais cela peut être pratique.

sed -i 's/File//g
    s/MINvac\.pdb//g' /home/kanika/standard_minimizer_prosee/r

Bien sûr, dans ce cas limité, vous pourriez aussi tout combiner en une seule regex :

sed -i 's/\(File\|MINvac\.pdb\)//g' /home/kanika/standard_minimizer_prosee/r

(Quelques sed Les dialectes voudront le faire sans les antislashes, et/ou offriront une option pour utiliser des expressions régulières étendues, où elles devraient être omises. BSD sed et donc aussi MacOS sed exige un argument obligatoire pour sed -i qui peut toutefois être vide, comme sed -i ''. )

39voto

Michael J. Barber Points 12837

Utilisez le -e drapeau :

sed -i -e 's/File//g' -e 's/MINvac.pdb//g' /home/kanika/standard_minimizer_prosee/r

Une fois que vous avez plus de commandes qu'il n'est pratique de définir avec -e il est préférable d'enregistrer les commandes dans un fichier séparé et de l'inclure avec la balise -f drapeau.

Dans ce cas, vous feriez un fichier contenant :

s/File//g
s/MINvac.pdb//g

Appelons ce fichier "sedcommands". Vous l'utiliserez alors avec sed comme ceci :

sed -i -f sedcommands /home/kanika/standard_minimizer_prosee/r

Avec seulement deux commandes, il n'est probablement pas utile d'utiliser un fichier séparé de commandes, mais c'est assez pratique si vous avez beaucoup de transformations à faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X