Remplacement de plusieurs lignes dans sed ou awk [fermé]

9

J'essaie d'utiliser sed ou awk pour remplacer 5 lignes dans un fichier smb mais je n'ai aucune idée de comment gérer les nouvelles lignes.

glisignoli
la source
6
Bien sûr, sed et awk peuvent le faire, mais j'ai un peu de mal à comprendre exactement quelle est votre question. Qu'est-ce qui vous cause exactement des problèmes? Insérer de nouvelles lignes? Les remplacer?
frabjous

Réponses:

19

Sed est assez mauvais à cela, car il exploite une ligne à la fois. La seule technique décente que j'ai jamais vue pour faire cela est celle-ci , qui consiste à stocker le fichier entier dans le tampon de maintien de sed, puis à l'utiliser en une seule fois:

sed -n '1h;1!H;${g;s/search/replace/;p;}'

Si vous le pouvez, il est beaucoup plus facile d'utiliser perl pour y parvenir:

perl -0pe 's/search/replace/'

searchpeut contenir \ns pour représenter des sauts de ligne

Michael Mrozek
la source
1
+1 pour le sedmultiliner.
Lazer
Pouvez-vous expliquer ce que la ligne de commande fait pour perl?
Michael
1
@Michael -0définit le séparateur d'enregistrement sur null, donc tout le fichier sera lu en une seule fois au lieu de ligne par ligne. -pfait imprimer le résultat après la substitution. -edoit prendre l'argument suivant comme expression à exécuter, et s/search/replace/est cette expression
Michael Mrozek