Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/07/2020, à 10: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, à 16:17)

#2 Le 31/07/2020, à 10: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, à 11: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, à 11: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 lol

@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, à 11:55)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 31/07/2020, à 11:54

Compte supprimé

Re : [Résolu] Concerver texte entre caractères spéciaux

Super et en plus rapide ! cool

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, à 12: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, à 12: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, à 13: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, à 13:01)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 31/07/2020, à 13: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, à 16: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. smile