#1 Le 09/02/2013, à 12:53
- adr2
sed découpage chaîne et stockage dans des variables
Bonjour,
Je cherche à découper des chaînes en plusieurs morceaux et stocker le résultat dans des variables.
Ce code fonctionne :
i='abc123def456'
IFS=:
read a b c d < <(
echo "$i" | sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1:\2:\3:\4/'
)
echo "$a"
echo "$b"
echo "$c"
echo "$d"
mais il y a un caractère "interdit" (":"), je cherche donc une solution sans caractère "interdit".
Merci d'avance pour vos réponses
Hors ligne
#2 Le 09/02/2013, à 15:03
- Maisondouf
Re : sed découpage chaîne et stockage dans des variables
Avec une boucle:
#! /bin/sh
i='abc123def456'
n=0
a=""
while [ "$i" != "" ];
do
p=`echo $i | cut -c 1`
i=`echo $i | cut -c 2-`
# echo $p
t=`echo "0123456789" | grep $p`
if [ "$t" != "" ];
then
if [ "$n" != "0" ];
then
a=`echo $a$p`
continue;
else
echo $a
a=$p
n=1
continue;
fi
else
if [ "$n" != "0" ];
then
echo $a
a=$p
n=0
continue;
else
a=`echo $a$p`
continue;
fi
fi
done
echo $a
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#3 Le 09/02/2013, à 15:44
- Hizoka
Re : sed découpage chaîne et stockage dans des variables
et si tu ne change pas l'IFS ?
ca marcherait...
i='abc123def456'
read a b c d < <( sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1 \2 \3 \4/' <<< "$i")
tes chaines sont-elles toujours de 3 caracteres ?
tes chaines sont elles toujours a separer en 4 ?
i='abc123def456'
a=${i:3:3}
b=${i:6:3}
c=${i:9:3}
d=${i:12:3}
PS : tu peux remplacer
echo "$i" | sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1:\2:\3:\4/'
par
sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1:\2:\3:\4/' <<< "$i"
et en full bash :
i='abc123def456'
a=${i%%[1-9]*}
i=${i/#${a}}
b=${i%%[a-zA-Z]*}
i=${i/#${b}}
c=${i%%[1-9]*}
d=${i/#${c}}
Dernière modification par Hizoka (Le 09/02/2013, à 15:55)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 09/02/2013, à 21:03
- adr2
Re : sed découpage chaîne et stockage dans des variables
et si tu ne change pas l'IFS ?
ca marcherait...i='abc123def456' read a b c d < <( sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1 \2 \3 \4/' <<< "$i")
Non, dans ce cas là c'est l'espace qui devient interdit.
tes chaines sont-elles toujours de 3 caracteres ?
tes chaines sont elles toujours a separer en 4 ?
Non, je cherche une solution générique où c'est l'expression régulière qui détermine le découpage.
Hors ligne
#5 Le 09/02/2013, à 21:06
- Hizoka
Re : sed découpage chaîne et stockage dans des variables
bah oui mais comment sais tu ou il faut couper alors ?
c'est au changement entre lettre et chiffre ?
si oui le fullbash devrait aller car pas de caractere interdit et il recherche a chaque fois le passage de chiffre a lettre
Si tu ne veux pas de caracter interdit, comment sais tu ou il faut couper ?!
il faudrait que tu donnes d'autres exemples pour i
Si ce n'est pas avec le nombre de caractere a couper ni de caractere separateur...
Sinon en detournant le truc :
# Variable de base
i='abc123def456'
# Insertion de @@@ entre les chiffres et les lettres
i=$(sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1@@@\2@@@\3@@@\4/' <<< "$i")
# Creation d'un tableau contenant chaque partie
while read; do tableau+=("${REPLY}"); done <<< "${i//@@@/$'\n'}"
# Verification
echo "${tableau[0]}"
echo "${tableau[1]}"
echo "${tableau[2]}"
Dernière modification par Hizoka (Le 09/02/2013, à 21:24)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 10/02/2013, à 00:25
- adr2
Re : sed découpage chaîne et stockage dans des variables
Un script avec
sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1\n\2\n\3\n\4/' <<< "$i"
pourrait fonctionner mais je n'arrive pas à stocker les lignes dans des variables ou un tableau.
Avec :
ISF=$'\n'
i='a-_ %bc123d$e£f456' # contient une espace
j=1
for k in $(sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1\n\2\n\3\n\4/' <<< "$i")
do
a["$j"]="$k"
((j++))
done
j'obtiens :
a[1]="a-_"
a[2]="%bc"
a[3]="123"
a[4]="d$e£f"
alors que je voudrais obtenir :
a[1]="a-_ %bc"
a[2]="123"
a[3]="d$e£f"
a[4]="456"
==================================================================
Je rappelle que je cherche une solution "générique" c'est-à-dire un script facilement adaptable à un problème donné. Par exemple, l'expression régulière pourrait être :
s/^([^@]{1,})@(.{1,})\.([^.]{1,})$/\1\n\2\n\3/
pour décomposer une adresse mail.
azerty.uiop@qsdf.exemple.fr
donnerait :
azerty.uiop
qsdf.exemple
fr
Hors ligne
#7 Le 10/02/2013, à 00:50
- Watael
Re : sed découpage chaîne et stockage dans des variables
Je rappelle que je cherche une solution "générique" c'est-à-dire un script facilement adaptable à un problème donné.
c'est contradictoire !
et c'est: I F S
non: I S F.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 10/02/2013, à 01:02
- Hizoka
Re : sed découpage chaîne et stockage dans des variables
tableau+=("....")
alors t'embete pas avec ton :
j=1
a["$j"]="$k"
((j++))
je vois pas comment te donner une reponse generic avec ce que tu demandes....
il faut obligatoirement donner des bases...
ex : séparer les chiffres des lettres
Voila une possibilité
# Variable a traiter
i='a-_ %bc123d$e£f456'
# Destruction de variable qui pourrait foutre le bordel
unset var_post_traitement caract old_caract tableau
# Boucle qui traite les caracteres un a un
for (( x=0; x<${#i}; x++ ))
do
# Teste le type de caractere
case ${i:${x}:1} in
[a-zA-Z]) caract="lettre" ;;
[0-9]) caract="chiffre" ;;
*) caract=${old_caract} ;;
esac
# Creer un old_caract identique a caract s'il n'existe pas,
# Sii pas cette ligne alors le if coincera toujours a la 1ere condition
[[ -z ${old_caract} ]] && old_caract=${caract}
# Compare le type du nouveau caractere avec l'ancien
if [[ ${caract} == ${old_caract} || -z ${var_post_traitement} ]]
then
# C'est le meme type, il suffit de donner le caractere
var_post_traitement+="${i:${x}:1}"
else
# Les types sont differents, du coup on ajoute le separateur maison @@@
var_post_traitement+="@@@${i:${x}:1}"
# on change le type de caractere
old_caract=${caract}
fi
done
# Creation d'un tableau utilisant le separateur maison @@@ pour sectionner la variable
while read; do tableau+=("${REPLY}"); done <<< "${var_post_traitement//@@@/$'\n'}"
# Verification
for (( x=0; x<${#tableau[@]}; x++ )); do echo "${tableau[${x}]}"; done
marche avec :
i='a-_ %*pbc12 <3d$e£f4 56'
i='a-_ %*pb.c1.2 <-3d$e+£f4 56'
i='+1a-_ %*pb.c1.2 <-3d$e+£f4 56'
i='+1a-_ %*pb.c1.2 <-3d$e+£f4 56cac40-+ù%5ppp'
Dans le cas de : 40-+ù, il renvera 40-+ puis ù, il ne pourra pas renvoyer 40 puis -+ù
enfin tout ce beau code ne marche que si tu separe ta variable a chaque changement lettre-chiffre.
Sinon en modifiant *) caract=${old_caract} ;; en *) caract=autre ;; , on peut separer egalement les caracteres autres
Dernière modification par Hizoka (Le 10/02/2013, à 01:19)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#9 Le 10/02/2013, à 01:25
- nesthib
Re : sed découpage chaîne et stockage dans des variables
i='a-_ %bc123d$e£f456'
eval a=( $(sed 's/[[:digit:]]\+\|[^[:digit:]]\+/"&" /g' <<<$i) )
echo ${a[0]}
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}
et si les guillemets doubles « " » doivent aussi être prises en compte :
i='a-_ %bc12"3d$e£"f456'
eval a=( $(sed -e 's/"/\\"/g' -e 's/[[:digit:]]\+\|[^[:digit:]]\+/"&" /g' <<<$i) )
pas besoin de faire des scripts compliqués de dizaines de lignes
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#10 Le 10/02/2013, à 01:43
- Watael
Re : sed découpage chaîne et stockage dans des variables
`eval' n'est pas justifié (comme s'il pouvait l'être).
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 10/02/2013, à 02:12
- Maisondouf
Re : sed découpage chaîne et stockage dans des variables
pas besoin de faire des scripts compliqués de dizaines de lignes
Ben moi, je pars du principe que plus il y a de lignes qui font chacune une petite chose simple, c'est beaucoup plus facile à comprendre et surtout à débuguer.
Surtout qu'aujourd'hui on tourne plus avec des 8086 à 4,7 Mhz
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#12 Le 10/02/2013, à 02:21
- nesthib
Re : sed découpage chaîne et stockage dans des variables
`eval' n'est pas justifié (comme s'il pouvait l'être).
Tu peux détailler ?
Ben moi, je pars du principe que plus il y a de lignes qui font chacune une petite chose simple, c'est beaucoup plus facile à comprendre et surtout à débuguer.
Donc une ligne faisant une chose simple c'est moins facile que 50 lignes faisant des choses simples ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#13 Le 10/02/2013, à 02:31
- Maisondouf
Re : sed découpage chaîne et stockage dans des variables
AH parce que tu crois que ça c'est simple
eval a=( $(sed -e 's/"/\\"/g' -e 's/[[:digit:]]\+\|[^[:digit:]]\+/"&" /g' <<<$i) )
Pour moi c'est des hiéroglyphes
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#14 Le 10/02/2013, à 02:59
- nesthib
Re : sed découpage chaîne et stockage dans des variables
sed -e 's/"/\\"/g' -e 's/[[:digit:]]\+\|[^[:digit:]]\+/"&" /g' <<<$i
correspond à la contrainte de adr2, il a dit vouloir travailler avec des regex et pouvoir en changer (« Je cherche une solution générique où c'est l'expression régulière qui détermine le découpage. »).
Il reste donc :
eval a=( $(…) )
on fait pire
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#15 Le 10/02/2013, à 08:17
- Hizoka
Re : sed découpage chaîne et stockage dans des variables
Avec i='a-_ %*pbc12 <3d$e£f4 56'
a-_ %*pbc
12
<
3
d£f
456
a-_ %*pbc
12 <3
d$e£f
4 56
avec i='+1a-_ %*pb.c1.2 <-3d$e+£f4 56cac40-+ù%5ppp'
+
1
a-_ %*pb.c
1
.
2
<-
3
d+£f
456
cac
40
-+ù%
5
ppp
+1
a-_ %*pb.c
1.2 <-3
d$e+£f
4 56
cac
40-+
ù%
5
ppp
+
1
a
-_ %*
pb
.
c
1
.
2
<-
3
d
$
e
+£
f
456
cac
40
-+
ù
%
5
ppp
On a pas du tout les memes decoupages, meme si je decoupe au niveau des cracteres autre que numerique et alphabetique
par contre il est certain que c'est vachement plus court ta solution
nestib peux tu expliquer ta ligne sed stp.
Dernière modification par Hizoka (Le 10/02/2013, à 08:19)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#16 Le 10/02/2013, à 09:54
- nesthib
Re : sed découpage chaîne et stockage dans des variables
Ma ligne sed sépare les groupes de chiffres et de non chiffres (suite de [[:digit:]] ou de non [[:digit:]]) en les substituant par eux-mêmes (&) entourés pas des guillemets doubles et suivi d'un espace ("&" ). Ça n'est qu'un exemple, ça n'est pas nécessairement ce que adr2 voulait faire, mais comme tu avais parlé de détecter le changement chiffres/lettres, voici une solution
un autre exemple qui sépare les groupe contigus de chiffres, lettres ou autres caractères :
i='a-_ %*pbc12 <3d$e£f4 56'
sed -e 's/"/\\"/g' -e 's/[[:digit:]]\+\|[[:alnum:]]\+\|[^[:digit:][:alnum:]]\+/"&" /g' <<<"$i"
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#17 Le 10/02/2013, à 10:02
- Hizoka
Re : sed découpage chaîne et stockage dans des variables
je comprends pas tout mais le & est pratique, il va falloir que je vois comment il marche vraiment car je ne connaissais pas tout.
[^[:digit:][:alnum:]] => je ne savais pas qu'on pouvait regrouper comme ça
EDIT : en effet c'est pas mal tout ça, pas facile au 1er abord, ca donne en francais :
s/[[:digit:]]\+\|[[:alnum:]]\+\|[^[:digit:][:alnum:]]\+/"&" /g
remplace les suites de chiffre ou les suites de lettre ou les suites de caracteres non chiffre/lettre par eux même entre guillemet et suivit d'un espace.
s => remplacement
[[:digit:]]\+ => suite de chiffre
\| : ou
[[:alnum:]]\+ : suite de lettre
\| : ou
[^[:digit:][:alnum:]]\+ : suite de cractere different de lettre ou chiffre
"&" => encadre la suite de " et fini avec un espace
Dernière modification par Hizoka (Le 10/02/2013, à 10:14)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#18 Le 10/02/2013, à 10:10
- nesthib
Re : sed découpage chaîne et stockage dans des variables
[[:digit:]] → n'importe quel chiffre
[[:digit:]]\+ → n'importe quel chiffre, au moins une fois et le plus possible
a\|b → a OU b
l'opérateur g à la fin de la commande est pour répéter l'expression sur tous les groupes
donc la ligne est à lire comme « tous les groupes de un ou plus chiffres OU de une ou plus lettres OU de un ou plus caractères qui ne sont ni chiffres ni lettres »
le & ne fait que remplacer chaque motif trouvé (comme \1 ou \2 mais sans besoin de parenthèse et d'identifier les groupes)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#19 Le 10/02/2013, à 10:15
- Hizoka
Re : sed découpage chaîne et stockage dans des variables
oui je viens d'editer mon message
j'avais pas mal compris !
J'aurais appris de nouveau truc pratique pour sed !!
merci
EDIT : par contre je pige pas pourquoi ton exemple renvoie :
a
-_ %*
pbc12
<
3d
$
e
£
f4
56
pourquoi pbc12 et 3d et f4 ?
c'est peut etres plus simple a comprendre ca :
sed -r 's/"/\"/g ; s/[[:digit:]]+|[[:alnum:]]+|[^[:digit:][:alnum:]]+/"&" /g' <<<"$i"
ca evite d'avoir les echappements pour le coup
Dernière modification par Hizoka (Le 10/02/2013, à 10:32)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#20 Le 10/02/2013, à 12:45
- Watael
Re : sed découpage chaîne et stockage dans des variables
`eval' n'est pas justifié (comme s'il pouvait l'être).
Tu peux détailler ?
`eval' c'est mal. Et ici il ne sert à rien.
Tu assignes une substitution de commande à un tableau. Il n'y a aucune raison d'utiliser `eval'.
Que fait cette commande dans ton code selon toi ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#21 Le 10/02/2013, à 12:59
- adr2
Re : sed découpage chaîne et stockage dans des variables
et c'est: I F S
non: I S F.
IFS=$'\n'
i='a-_ %bc123d$e£f456' # contient une espace
j=1
for k in $(sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1\n\2\n\3\n\4/' <<< "$i")
do
a["$j"]="$k"
((j++))
done
=> mon script fonctionne comme je le souhaitais
hizoka a écrit :tableau+=("....")
alors t'embete pas avec ton :
j=1 a["$j"]="$k" ((j++))
=> amélioration :
IFS=$'\n'
i='a-_ %bc123d$e£f456' # contient une espace
for k in $(sed -r 's/^([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})$/\1\n\2\n\3\n\4/' <<< "$i")
do
a+=("$k")
done
Je vous donne un exemple d'adaptation pour le découpage d'URL :
IFS=$'\n'
i='http://forum.ubuntu-fr.org/viewtopic.php?id=1194001'
for k in $(sed -r 's#^([^:]{1,})://(.{1,})\.([^.]{1,})/(.*)$#\1\n\2\n\3\n\4#' <<< "$i")
do
a+=("$k")
done
donne
a[0]="http"
a[1]="forum.ubuntu-fr"
a[2]="org"
a[3]="viewtopic.php?id=1194001"
Hors ligne
#22 Le 10/02/2013, à 18:15
- nesthib
Re : sed découpage chaîne et stockage dans des variables
`eval' c'est mal. Et ici il ne sert à rien.
Tu assignes une substitution de commande à un tableau. Il n'y a aucune raison d'utiliser `eval'.Que fait cette commande dans ton code selon toi ?
Selon moi cette commande fait ce qu'on lui demande
eval n'a rien de mal, je ne sais pas d'où tu sors ça, c'est une primitive du shell, il suffit juste de savoir l'utiliser.
Je pense que tu manques un point important du fonctionnement du shell. Sans eval la commande
a=( $(…) )
ne fera pas l'interprétation des "abc" "123" comme des chaînes de caractères délimitées mais prendra en compte « " » comme un simple caractère (à cause de l'ordre des expansions dans bash) et les chaînes seront toujours séparées par… les espaces… même au sein de "ab c", ce qui donnera « "ab » et « c" ».
Avec eval le tableau est correctement crée car le shell prend en compte les guillemets comme encadrant les chaînes de caractères.
Si tu as une meilleure méthode, sans eval, qui prenne en compte les guillemets et les espaces dans la chaîne de caractères initiale (ex. « ») et qui permette de séparer correctement les sous chaînes en les assignant dans un tableau… je t'écoute
J'attends aussi une explication un peu plus argumentée de la saymalitude de eval
@Hizoka : oups, petite erreur, j'ai utilisé [[:alnum:]] au lieu de [[:alpha:]], voilà pourquoi
@adr2 : as-tu testé (et compris) ma solution ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#23 Le 10/02/2013, à 18:44
- Watael
Re : sed découpage chaîne et stockage dans des variables
Je roule à 240 km/h, parce que le compteur de ma voiture peut aller jusqu'à cette vitesse.
Et c'est pas un problème : il suffit de savoir s'en servir. XD
Je considère meilleure n'importe quelle autre solution, qui n'implique pas `eval'.
i='a-_ %bc123d$e£f456'; OIFS="$IFS"; IFS="${IFS// /}"; a=( $(sed 's/[[:digit:]]\+\|[^[:digit:]]\+/&\n/g' <<<"$i") ); IFS="$OIFS"; printf '%s\n' "${a[@]}"
a-_ %bc
123
d$e£f
456
J'attends aussi une explication un peu plus argumentée de la saymalitude de eval
on en a déjà parlé l'an dernier. regarde dans les archives.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 10/02/2013, à 22:42
- adr2
Re : sed découpage chaîne et stockage dans des variables
@adr2 : as-tu testé (et compris) ma solution ?
Ça fonctionne pour le premier exemple que j'ai donné mais ça ne permet pas de décomposer une URL par exemple, mais c'est un script intéressant qui peut être adapté pour parser du HTML :
i='<!DOCTYPE html>
<html>
<head>
<title>blabla</title>
</head>
<body>
<h1>blabla</h1>
<p>Lorem ipsum</p>
</body>
</html>'
sed 's/<[^>]\+>\|[^<]\+/"&" /g' <<<$i
Hors ligne
#25 Le 11/02/2013, à 03:44
- nesthib
Re : sed découpage chaîne et stockage dans des variables
@Watael : Ton analogie est fallacieuse… il ne suffit pas de comparer à quelque chose d'absurde pour rendre l'idée initiale fausse
Sinon ta solution ne prend pas en compte le cas où « \n » est dans i, elle prendra « \n » comme un séparateur et non comme une partie de la chaîne (mais je t'accorde que tu peux rajouter des étapes pour contourner le problème, mais c'est pareil avec sed puisqu'il ne travaille que sur des lignes).
Pour les archives, désolé, je ne me souvenais pas et je n'ai pas retrouvé.
@adr2 : il suffit de changer l'expression rationnelle (pour quelque chose du genre : a=( $(sed 's/\([^@]\+\)@\([^@]\+\)\.\([^\.]\+\)/"\1" "\2" "\3"/' <<<"test.machin@mail.truc.com") )), mais dans un tel cas j'avoue que ça devient inutile puisqu'il y a rarement (!) des espaces dans une adresse mail (et une simple affectation de tableau sera suffisante).
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne