Combinaison de deux commandes sed

j'ai un fichier r. Je veux remplacer les mots File et 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 commande en une, mais je ne connais pas le chemin. Quelqu'un peut-il 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
25
demandé sur Benjamin W. 2011-10-05 10:48:10
la source

2 ответов

sed est un langage de script. Vous séparez les commandes avec un point-virgule ou une nouvelle ligne. Beaucoup de sed dialectes vous permettent également de passer chaque commande distinct -e option argument.

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

j'ai aussi ajouté un antislash pour bien citer le point littéral avant pdb, mais dans ce contexte limité, cela n'a probablement pas d'importance.

pour être complet, voici la variante newline. Beaucoup de nouveaux venus sont déconcertés que le shell permette de nouvelles lignes littérales dans Cité des ficelles, mais ça 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 pouvez aussi tout combiner en un seul regex:

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

(Certains sed les dialectes voudront ceci sans antislashs, 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 à sed -i qui peut cependant être vide, comme sed -i ''.)

46
répondu tripleee 2017-12-11 09:29:00
la source

-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 -es, il est préférable de stocker les commandes dans un fichier séparé et de l'inclure avec l' -f drapeau.

dans ce cas, vous feriez un fichier contenant:

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

appelons ce fichier 'sedcommands'. Vous l'utiliseriez alors avec sed comme ceci:

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

avec seulement deux commandes, ce n'est probablement pas la peine d'utiliser un fichier séparé de les commandes, mais c'est très pratique si vous avez beaucoup de transformations à faire.

23
répondu Michael J. Barber 2011-10-05 11:20:42
la source

Autres questions sur