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
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
Réponses:
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:
Si vous le pouvez, il est beaucoup plus facile d'utiliser perl pour y parvenir:
search
peut contenir\n
s pour représenter des sauts de lignela source
sed
multiliner.-0
définit le séparateur d'enregistrement sur null, donc tout le fichier sera lu en une seule fois au lieu de ligne par ligne.-p
fait imprimer le résultat après la substitution.-e
doit prendre l'argument suivant comme expression à exécuter, ets/search/replace/
est cette expression