#26 Le 17/12/2015, à 22: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.
Hors ligne
#27 Le 18/12/2015, à 08: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à
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#28 Le 18/12/2015, à 10: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, à 11:08)
--
JJR.
Hors ligne
#29 Le 18/12/2015, à 13: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, à 16:48
- pingouinux
Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne
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, à 19: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, à 20: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, à 01: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, à 15: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, à 15: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, à 17: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, à 18:52)
Hors ligne
#37 Le 19/12/2015, à 18: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
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#38 Le 19/12/2015, à 18: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, à 19: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, à 19: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, à 21: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, à 21:54)
Hors ligne
#42 Le 19/12/2015, à 23: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, à 06:49
- pingouinux
Re : [RÉSOLU] Ajouter un texte en début et fin de chaque ligne
Ça commence à devenir compliqué, ton histoire…
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, à 13:08)
Hors ligne
#44 Le 20/12/2015, à 11: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, à 14: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, à 14: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…
Hors ligne
#47 Le 24/12/2015, à 00: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, à 00:07)
-- Lucid Lynx --
Hors ligne