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.

#26 Le 17/12/2015, à 23:46

pingouinux

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Il est vrai que ma ligne de code est plus difficile à prononcer que le script d'Hizoka. smile

Hors ligne

#27 Le 18/12/2015, à 09:33

Hizoka

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Ouais c'est pour ça que je préfère les petits scripts aux longues lignes sed qui deviennent très vite impossible à modifier...

Enfin voila, je pense qu'il a le choix dans sa solution là smile


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

Hors ligne

#28 Le 18/12/2015, à 11:54

gigiair

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Sous Emacs, il sufFit de faire un replace-regexp

 (replace-regexp "\\(http[s]?://\\(www\\)?[.]?\\([^/]+\\).*\\)" "[url=\\1]\\3[/url]" )

Soit en mode interactif

M-<
C-M-% \(http[s]?://\(www\)?[.]?\([^/]+\).*\) RET  [url=\1]\3[/url] RET !

On peut exécuter cette action sans charger le fichier en mode batch

emacs --batch atuer.txt --eval '(progn (replace-regexp "\\(http[s]?://\\(www\\)?[.]?\\([^/]+\\).*\\)" "[url=\\1]\\3[/url]")(save-buffer))' 

J'ai essayé avec gedit, il y a bien une coche pour rechercher/remplacer par expression régulière, mais je n'ai pas réussi à le faire fonctionner et je n'ai pas trouvé d'aide. Comme je n'ai aucun désir d'utiliser gedit, je n'ai pas cherché très longtemps.

edit:
J'ai construit la regexp de capture avec re-builder, dans Emacs, évidemment qui permet de construire la regexp en mode interactif et de contrôler immédiatement son effet.

Dernière modification par gigiair (Le 18/12/2015, à 12:08)


--
JJR.

Hors ligne

#29 Le 18/12/2015, à 14:43

Elven

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Et le gagnant est :
...
Tout le monde il a gagné. C'est l'école des fans, c'est noël, c'est cadeau.

emacs je l'ai pas, donc j'ai pas testé.

J'ai trouvé qu'un site, pour l'instant qu'est écrit encore différemment. http://eu.site.com
Je vais le changer à la main, ou j’essaierais de de rajouter une ligne dans le script de Hizoka s'il a trop de petits frères. Je devrais commencer à comprendre comment faire.

Merci.


Ubuntu studio 18.04
CPU I5 3330 (3GHz) / GPU Radeon 7850 1Go / RAM 8Go
SSD 120Go (partition /home séparée du système) / DD 1To (partition de données) / DD 2To (partition de données)

Hors ligne

#30 Le 18/12/2015, à 17:48

pingouinux

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Elven #29 a écrit :

J'ai trouvé qu'un site, pour l'instant qu'est écrit encore différemment. http://eu.site.com

En quoi est-il différent ? Quel résultat voudrais-tu ?

Hors ligne

#31 Le 18/12/2015, à 20:55

Elven

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Il est différent parce que il commence par http://eu. Un cas que j'ai pas vu avant, et qu'on a donc pas mis.
Et comme pour les autres sites il faut aussi le mettre en :

[url=http://eu.site.com]Site[/url]

Ubuntu studio 18.04
CPU I5 3330 (3GHz) / GPU Radeon 7850 1Go / RAM 8Go
SSD 120Go (partition /home séparée du système) / DD 1To (partition de données) / DD 2To (partition de données)

Hors ligne

#32 Le 18/12/2015, à 21:06

pingouinux

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

C'est ce que fait la commande sed que je donne en #24.

Hors ligne

#33 Le 19/12/2015, à 02:12

Hizoka

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Nom_du_site="${Nom_du_site/#eu.}"

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

Hors ligne

#34 Le 19/12/2015, à 16:04

Elven

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Du coup, le scrip ou le sed, ça enlève tout ce qui n'est pas un lien.
Comme mes liens sont classées, ils sont séparés, et avec des noms pour les catégories. En mettant un seul mot sur la ligne qui précède une catégorie (en MAJUSCULE ou minuscule), ou en mettant des séparateurs avec toujours le même nombre de "-". Le même nombre qu'en exemple dessous :

TRUCS
bidule
http://www.site.com/
http://www.site.com/
http://www.site.com/
http://site.com/
http://www.site.it/
--------------------
http://www.site.com/
http://shop.site.com/
--------------------
http://www.site.fr/
http://www.site.com/
http://www.site.com/

Il faudrait que ça soit comme ça :

TRUCS
bidule
[url=http://www.site.com/]Site[/url]
[url=http://www.site.com/]Site[/url]
[url=http://www.site.com/]Site[/url]
[url=http://site.com/]Site[/url]
[url=http://www.site.it/]Site[/url]
--------------------
[url=http://www.site.com/]Site[/url]
[url=http://shop.site.com/]Site[/url]
--------------------
[url=http://www.site.fr/]Site[/url]
[url=http://www.site.com/]Site[/url]
[url=http://www.site.com/]Site[/url]

Ubuntu studio 18.04
CPU I5 3330 (3GHz) / GPU Radeon 7850 1Go / RAM 8Go
SSD 120Go (partition /home séparée du système) / DD 1To (partition de données) / DD 2To (partition de données)

Hors ligne

#35 Le 19/12/2015, à 16:40

Hizoka

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

while read Site
do
 Nom_du_site="${Site/#http:\/\/www.}"
 Nom_du_site="${Nom_du_site/#https:\/\/www.}"
 Nom_du_site="${Nom_du_site/#http:\/\/}"
 Nom_du_site="${Nom_du_site/#https:\/\/}"
 Nom_du_site="${Nom_du_site/#shop.}"
 Nom_du_site="${Nom_du_site/#fr.}"
 Nom_du_site="${Nom_du_site/#eu.}"
 Nom_du_site="${Nom_du_site%%.*}"
 [[ "${Site:0:4}" == "http" ]] && echo "[url=${Site}]${Nom_du_site}[/url]" >> NouveauFichier || echo "${Site}" >> NouveauFichier
done < Fichier_des_sites

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

Hors ligne

#36 Le 19/12/2015, à 18:04

pingouinux

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

sed -r 's#(^http[^.]*[\./]([^.])([^.]*)\..*)#[url=\1]\U\2\E\3[/url]#' liste_des_sites

Édité : Petite simplification

sed -r 's#(^http[^.]*[./]([^.])([^.]*)\..*)#[url=\1]\U\2\E\3[/url]#' liste_des_sites

Dernière modification par pingouinux (Le 19/12/2015, à 19:52)

Hors ligne

#37 Le 19/12/2015, à 19:16

Hizoka

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

C'est là que les annotations prennent toute leur importance tongue


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

Hors ligne

#38 Le 19/12/2015, à 19:56

Elven

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Certains sites ne passe pas avec sed, alors que c'est bon avec le script. mais le script n'a pas les majuscules sur la première lettre de l'alias.

pour :

http://site1.fr/index.php?
http://site2.com/Home.aspx?language=FR
http://site3.com/store/index.php/
http://site4.com/forums/index.php

ça me met, avec "sed" :

[url=http://site1.fr/index.php?]Fr/index[/url]
[url=http://site2.com/Home.aspx?language=FR]Com/Home[/url]
[url=http://site3.com/store/index.php/]Com/store/index[/url]
[url=http://site4.com/forums/index.php]Com/forums/index[/url]

alors qu'il faudrait :

[url=http://site1.fr/index.php?]Site1[/url]
[url=http://site2.com/Home.aspx?language=FR]Site2[/url]
[url=http://site3.com/store/index.php/]Site3[/url]
[url=http://site4.com/forums/index.php]Site4[/url]

Y'aurait pas une astuce, dans gedit au autre, pour voir directement les mots identiques dans une ligne ?
Pour vérifier rapidement si c'est bien le nom du site qui est repris pour l'alias, et pas une autre partie de l'adresse.


Ubuntu studio 18.04
CPU I5 3330 (3GHz) / GPU Radeon 7850 1Go / RAM 8Go
SSD 120Go (partition /home séparée du système) / DD 1To (partition de données) / DD 2To (partition de données)

Hors ligne

#39 Le 19/12/2015, à 20:29

pingouinux

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Cette commande devrait presque te donner satisfaction

sed -r 's#(^https?://(www\.)?([^./])([^./]*)[./].*)#[url=\1]\U\3\E\4[/url]#' liste_des_sites

Dans tes exemples en #34, seul celui-ci ne marche pas : http://shop.site.com/

$ sed -r 's#(^https?://(www\.)?([^./])([^./]*)[./].*)#[url=\1]\U\3\E\4[/url]#' <<<"http://shop.site.com/"
[url=http://shop.site.com/]Shop[/url]

Je ne vois pas comment faire, à moins d'avoir la liste de tous les mots (comme shop) pouvant précéder le nom du site.
Les spécifications me semblent très évolutives…

Hors ligne

#40 Le 19/12/2015, à 20:37

Hizoka

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Une majuscule ? ou ça ?
dans le nom du site ?

${Nom_du_site^}

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

Hors ligne

#41 Le 19/12/2015, à 22:02

pingouinux

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Avec awk, semble correct

awk -F/ '{if($0~/^http/){lig=$0;sub("^www\\.","",$3);sub("\\.[^.]*$","",$3);sub("^[[:alnum:]]+\\.","",$3);print "[url="lig"]"toupper(substr($3,1,1))substr($3,2)"[/url]"}else print}' liste_des_sites

Édité : La même chose, sur plusieurs lignes

awk -F/ '{
   if($0~/^http/){
          lig=$0;
          sub("^www\\.","",$3);
          sub("\\.[^.]*$","",$3);
          sub("^[[:alnum:]]+\\.","",$3);
          print "[url="lig"]"toupper(substr($3,1,1))substr($3,2)"[/url]"
   }   
   else print
}' liste_des_sites

Dernière modification par pingouinux (Le 19/12/2015, à 22:54)

Hors ligne

#42 Le 20/12/2015, à 00:52

Elven

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

awk fonctionne pas pour des adresse avec un ".co.", comme ça:

http://www.site.co.uk/

qui donnent :

[url=http://www.site.co.uk/]Co[/url]

alors qu'il faudrait :

[url=http://www.site.co.uk/]Site[/url]

Et un seule qui marche pas mais en ".com.".


Hizoka, les majuscules ne sont pas sur la première lettre  du mot entre ][.
j'ai ça :

[url=http://www.site.co.uk/]site[/url]

et je devrais avoir :

[url=http://www.site.co.uk/]Site[/url]

Pour sed et le problème de shop, tous les mots à exclure que j'ai vu sont :
shop
store
custom
eshop
fr
C'est surtout "shop" qu'il y a beaucoup, le reste c'est un ou deux.


Ubuntu studio 18.04
CPU I5 3330 (3GHz) / GPU Radeon 7850 1Go / RAM 8Go
SSD 120Go (partition /home séparée du système) / DD 1To (partition de données) / DD 2To (partition de données)

Hors ligne

#43 Le 20/12/2015, à 07:49

pingouinux

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Ça commence à devenir compliqué, ton histoire… hmm

sed -r 's#(^https?://(www\.)?((shop|store|custom|eshop|fr)\.)?([^./])([^./]*)[./].*)#[url=\1]\U\5\E\6[/url]#' liste_des_sites

Édité :
Ou en décomposant la ligne

while read lig
do
   site=$(sed -rn 's#(^https?://)([^/]+).*#\2#p' <<<"$lig")
   if [ "$site" ]
   then
      site=$(sed -r 's#(www\.)?((shop|store|custom|eshop|fr)\.)?([^./]+)[./].*#\4#' <<<"$site")
      lig="[url=$lig]${site^}[/url]"
   fi
   echo "$lig"
done <liste_des_sites

Dernière modification par pingouinux (Le 20/12/2015, à 14:08)

Hors ligne

#44 Le 20/12/2015, à 12:45

Hizoka

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Hizoka, les majuscules ne sont pas sur la première lettre  du mot entre ][.

Bah oui, c'est ce que j'ai dit :

while read Site
do
 Nom_du_site="${Site/#http:\/\/www.}"
 Nom_du_site="${Nom_du_site/#https:\/\/www.}"
 Nom_du_site="${Nom_du_site/#http:\/\/}"
 Nom_du_site="${Nom_du_site/#https:\/\/}"
 Nom_du_site="${Nom_du_site/#shop.}"
 Nom_du_site="${Nom_du_site/#fr.}"
 Nom_du_site="${Nom_du_site/#eu.}"
 Nom_du_site="${Nom_du_site/#store.}"
 Nom_du_site="${Nom_du_site/#custom.}"
 Nom_du_site="${Nom_du_site/#eshop.}"
 Nom_du_site="${Nom_du_site%%.*}"
 [[ "${Site:0:4}" == "http" ]] && echo "[url=${Site}]${Nom_du_site^}[/url]" >> NouveauFichier || echo "${Site}" >> NouveauFichier
done < Fichier_des_sites

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

Hors ligne

#45 Le 20/12/2015, à 15:25

Elven

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Pour Nom_du_site je comprenais pas, c'est pour ça que je l'ai dit autrement.

Pour "sed", j'ai juste rajouter un |eu|. Pour le scipt il y est déjà.


Tout est bon pour moi.
Merci du coup de main.


Ubuntu studio 18.04
CPU I5 3330 (3GHz) / GPU Radeon 7850 1Go / RAM 8Go
SSD 120Go (partition /home séparée du système) / DD 1To (partition de données) / DD 2To (partition de données)

Hors ligne

#46 Le 20/12/2015, à 15:42

pingouinux

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Parfait. La prochaine fois, essaye de fournir toutes les spécifications dès le début, ça fera gagner du temps… tongue

Hors ligne

#47 Le 24/12/2015, à 01:05

Totor

Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne

Ma contribution (tardive - je précise que je n'ai pas parcouru la totalité du post) :

#!/bin/bash
shopt -s nocaseglob
pattern="www|fr"
while read
do
	[[ "${REPLY}" == http* ]] && {
		IFS='[/.]' read -a words <<<${REPLY}
		site=${words[2]}
		[[ "${site}" =~ ${pattern} ]] && site=${words[3]}
		printf '[url=%s]%s[/url]\n' "${REPLY}" "${site^}"
	}
done < site.lst

à toi de faire évoluer la liste des mots que tu ne souhaites pas comme "nom de site"

Une variante en zsh :

#!/bin/zsh
setopt EXTENDED_GLOB
pattern=( http https www fr )
while read
do
	[[ "${(L)REPLY}" == http* ]] && {
		IFS='[/.:]' read -A  <<<"${REPLY}"
		set -A site ${${(L)reply[@]}:|pattern}
		printf '[url=%s]%s[/url]\n' "${REPLY}" "${(C)site[1]}"
	}
done < site.lst

Dernière modification par Totor (Le 24/12/2015, à 01:07)


-- Lucid Lynx --

Hors ligne