11
votes

Étaler la commande 'SED' sur plusieurs lignes

J'essaie de diffuser une commande SED sur plusieurs lignes dans un fichier Bash. J'ai plusieurs modèles que SED vérifie et j'espère séparer certains des schémas par un changement de ligne. Voici mon script actuel qui ne fonctionne pas, mettant tout sur une ligne de marche, mais j'espérais simplement le nettoyer un peu et diviser les choses. XXX

Merci pour toute aide!


1 commentaires

Qu'est-ce que "ne fonctionne pas" signifie? Avez-vous un message d'erreur? Qu'est-ce que c'est? La sortie diffère-t-elle de ce que vous attendez? De quelle manière? Il ne faut pas être nécessaire d'échapper aux espaces et aux traits d'union de votre façon dont vous avez.


3 Réponses :


4
votes

Je ne sais pas si je vous ai compris, mais vous pouvez faire quelque chose comme ça si vous voulez simplement avoir plusieurs lignes d'expressions SED: xxx

ceci affiche 423 , comme prévu.

Si vous le souhaitez sur une ligne, c'est possible aussi: xxx

donne le même résultat.

pour ce que je Voyez, je vous suggérerais de le faire dans plusieurs lignes que vous le faites déjà, je ne fais que mettre tous les-sur une ligne séparée, comme je pense que c'est plus lisible. Quelque chose comme: xxx

vérifier ce lien pour plus d'informations:


1 commentaires

Eh bien, j'espérais inclure les mêmes commandes sur une ligne comme: Sed -e 'S / \ XVID \ -Lol // i; S / \ XVID \ -XOR // I; S / \ XVID \ -NOTV // I et utilisez le semi-points pour séparer des schémas similaires au lieu de séparer chacun individuellement. Essayer de jumeler les modèles ensemble si je peux.



10
votes

Le problème est sur cette ligne: xxx pré>

Il y a un S / code>. Il devrait être: p> xxx pré>

J'ai inclus la barre oblique inverse de la cohérence. P>

Cette ligne est manquante // i code>: p> xxx pré>

corrigé: p> xxx pré>

Les messages d'erreur que j'ai obtenus étaient ce qui m'a conduit à la source des erreurs: p>

while read -r pattern
do
    sedscript+="$pattern;"
done <<EOF
s/ \([^ ]*\)$/.\1/
s/\ \[sharethefiles\ com\]//i
s/\ x264\-Ctu//i
s/\ x264\-Bia//i
...
s/\ XVID//i
EOF

renF=$(echo "$f" | tr '.' ' ' | sed -e "$sedscript")


2 commentaires

Hmmmm, peut-être corriger ces erreurs stupides peut-être le problème. Je vais devoir vérifier cela.


Merci pour l'aide, je l'apprécie, c'est ce que je cherchais. Merci!



3
votes

une alternative éventuellement plus agréable serait d'utiliser un HereDoc, si GNU SED est disponible (non intégré à OSX):

sed -f - "$IN" > "$OUT" << SED_SCRIPT
  s/a/1/g
  s/test/full/g
SED_SCRIPT


0 commentaires