#1 Le 31/07/2020, à 09:45
- Slyfox
[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 Slyfox (Le 31/07/2020, à 15:17)
Hors ligne
#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>@@' fichieret si c'est bon :
sed -i 's@<font size="36"><b>@@; s@</b></font>@@' fichierKubuntu 20.04 64bits
GUI d'extraction de piste de fichier mkv -- Vignettes personnalisées -- Select boosté aux hormones -- Générateur de barre de progression
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' fichierHors 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,014stime sed 's@<[^>]*>@@g' a
real 0m0,106s
user 0m0,013s
sys 0m0,020sS'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)
Kubuntu 20.04 64bits
GUI d'extraction de piste de fichier mkv -- Vignettes personnalisées -- Select boosté aux hormones -- Générateur de barre de progression
Hors ligne
#5 Le 31/07/2020, à 10:54
- Slyfox
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.
Hors ligne
#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' fichierHors ligne
#7 Le 31/07/2020, à 11:35
- Slyfox
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 @).
Hors ligne
#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)
Kubuntu 20.04 64bits
GUI d'extraction de piste de fichier mkv -- Vignettes personnalisées -- Select boosté aux hormones -- Générateur de barre de progression
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/' fichierAvec 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@' fichierHors ligne
#10 Le 31/07/2020, à 15:18
- Slyfox
Re : [Résolu] Concerver texte entre caractères spéciaux
Merci pour vos explications, sujet résolu.
Bonne fin de journée à tous. ![]()
Hors ligne