Comment utiliser sed pour supprimer une chaîne avec des caractères génériques
Fichier1:
<a>hello</b> <c>foo</d>
<a>world</b> <c>bar</d>
Est un exemple de fichier ce serait de travailler sur. Comment peut-on supprimer toutes les chaînes qui ont une <c>*</d>
à l'aide de sed?
- Qu'entendez-vous par "retirer toutes les cordes"? Entendez-vous supprimer cette ligne entière ou simplement le fait que le bloc de texte?
- Toutes les chaînes de caractères commençant par <c>, et se terminant avec </d>. La commande ci-dessous a parfaitement fonctionné. Toute personne utilisant la commande aussi, évidemment, doit ajouter le fichier à la fin de la commande.
Vous devez vous connecter pour publier un commentaire.
La ligne suivante va supprimer tout le texte de la
<c>
à</d>
inclusive:Les bits à l'intérieur de la
s/...//
est une expression régulière, pas vraiment un caractère générique dans la même manière que le shell utilise, donc tout ce que vous pouvez mettre dans une expression régulière, vous pouvez mettre là.si l'ensemble de vos données est semblable à celle de l'exemple
Grand couteau Suisse!
J'ai modifié à tirer des informations d'en-tête d'e-mails pour un archivage de script. Elle implique le fait de renommer le IMAP e-mails avec à la fois la date et l'info de l'expéditeur (dans le cas contraire IMAP juste numérotées 1, 2, 3, etc.). Voici les deux mods:
for i in $mailarray; do date -d $(less -f $i | grep -im 1 "Date:\ " | sed -e 's_^.*\(ate: \)__') +%F_%T%Z; done
for i in $mailarray; do less -f "$i" | grep -iEm 1 "From:\ " | sed -e 's_^.*\(rom\).*<\|^.*\(rom:\).__' | sed -e 's_@.*$__'; done
Ils ont sauvé une grande partie de superflu et de codage. Merci.