#1 Le 31/07/2020, à 09:45
- Compte supprimé
[Résolu] Concerver texte entre caractères spéciaux
Bonjour,
Voici un exemple de texte:
1
00:01:13,390 --> 00:01:16,040
<font size="36"><b>Profitez-en pour traverser ce temple !</b></font>
2
00:01:16,060 --> 00:01:16,740
<font size="36"><b>Allez !</b></font>
et je cherche comme résultat ça:
1
00:01:13,390 --> 00:01:16,040
Profitez-en pour traverser ce temple !
2
00:01:16,060 --> 00:01:16,740
Allez !
Comment faire ça en ligne de commande (awk ou sed) ?
Merci de votre aide
Dernière modification par Compte supprimé (Le 31/07/2020, à 15:17)
#2 Le 31/07/2020, à 09:53
- Hizoka
Re : [Résolu] Concerver texte entre caractères spéciaux
Salut,
tu peux tout simplement effacer les textes qui gênent.
sed 's@<font size="36"><b>@@; s@</b></font>@@' fichier
et si c'est bon :
sed -i 's@<font size="36"><b>@@; s@</b></font>@@' fichier
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 31/07/2020, à 10:03
- pingouinux
Re : [Résolu] Concerver texte entre caractères spéciaux
Bonjour,
Ou, si les couples "< >" ne sont pas imbriqués :
sed 's@<[^>]*>@@g' fichier
Hors ligne
#4 Le 31/07/2020, à 10:53
- Hizoka
Re : [Résolu] Concerver texte entre caractères spéciaux
Ah !
Sur un fichier de 5 000 lignes :
time sed 's@<font size="36"><b>@@; s@</b></font>@@' a
real 0m0,051s
user 0m0,007s
sys 0m0,014s
time sed 's@<[^>]*>@@g' a
real 0m0,106s
user 0m0,013s
sys 0m0,020s
S'il fait un copié collé du code je suis le plus rapide !
Par contre s'il la tape, ta commande est bien plus rapide
@Slyfox : Prends celle de pingouinux qui sera plus efficace, il suffit qu'il y est un espace de trop par-ci par-là pour que mon code ne soit pas totalement efficace.
Dernière modification par Hizoka (Le 31/07/2020, à 10:55)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 31/07/2020, à 10:54
- Compte supprimé
Re : [Résolu] Concerver texte entre caractères spéciaux
Super et en plus rapide !
Par contre mon premier exemple est incomplet, excusé moi voici un autre exemple plus complet:
1
00:00:53,510 --> 00:01:00,490
<font face="Ashley Crawford" size="48" color="#272727">{\an3}La bataille <font color="#f8b501">du temple <font color="#fbdbd8">du <font color="#272727">Taureau</font></font></font></font>
2
00:01:13,390 --> 00:01:16,040
<font size="36"><b>Profitez-en pour traverser ce temple !</b></font>
3
00:01:16,060 --> 00:01:16,740
<font size="36"><b>Allez !</b></font>
Résultat souhaité:
1
00:00:53,510 --> 00:01:00,490
La bataille du temple du Taureau
2
00:01:13,390 --> 00:01:16,040
Profitez-en pour traverser ce temple !
3
00:01:16,060 --> 00:01:16,740
Allez !
Pour plus de détail, le fichier source est un fichier de sous titrage au format srt. (obtenu après conversion d'un fichier originel en ass) le problème c'est que beaucoup d'appareil de lecture ne savent pas bien lire les fichiers srt avec des balises <>. Alors peut-être il existe une manière plus simple d'obtenir le résultat attendu avec une option via FFmpeg. Le cas échéant je poserai cette question sur la rubrique multimédia.
#6 Le 31/07/2020, à 11:03
- pingouinux
Re : [Résolu] Concerver texte entre caractères spéciaux
Avec ton nouvel exemple, si j'ai bien compris, il faut aussi supprimer ce qui se trouve entre "{ }".
sed 's@<[^>]*>\|{[^}]*}@@g' fichier
Hors ligne
#7 Le 31/07/2020, à 11:35
- Compte supprimé
Re : [Résolu] Concerver texte entre caractères spéciaux
Super et voici un problème résolu.
Pour ma culture, concernant ta dernière ligne de commande, pourrais-tu me l'expliquer (en particulier l'utilisation du @).
#8 Le 31/07/2020, à 12:00
- Hizoka
Re : [Résolu] Concerver texte entre caractères spéciaux
les @ servent de séparateur, tu peux utiliser différents caractères comme séparateur.
<[^>]*> : remplace tous les caractères différents de > compris entre < et >
\| : ou
{[^}]*} : remplace tous les caractères différents de } compris entre { et }
@@ : par rien du tout (donc supprime l’élément recherché)
g : autant de fois que nécessaire par ligne (sinon il ne fait qu'une modification par ligne)
Si c'est bon, ajoute [Résolu] dans le titre de ton topic
Dernière modification par Hizoka (Le 31/07/2020, à 12:01)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#9 Le 31/07/2020, à 12:00
- pingouinux
Re : [Résolu] Concerver texte entre caractères spéciaux
sed 's/chaine_1/chaine_2/' fichier
Avec l'xpression ci-dessus, chaine_1 et chaine_2 ne doivent pas contenir de /, ou alors il faut mettre \/ à la place.
On peut remplacer le délimiteur par n'importe quel caractère non contenu dans les chaînes :
sed 's@chaine_1@chaine_2@' fichier
Hors ligne
#10 Le 31/07/2020, à 15:18
- Compte supprimé
Re : [Résolu] Concerver texte entre caractères spéciaux
Merci pour vos explications, sujet résolu.
Bonne fin de journée à tous.