#1 Le 03/01/2019, à 01:41
- qolepam
saisir des caractères d'un fichier texte à un emplacement précis
bonjour,
Je dispose d'un fichier texte contenant entre autre des espaces et des lignes vides.
Comment,en ligne de commande,récupérer les caractères de ce fichier texte compris entre un mot(ou caractère) et un autre mot(ou autre caractère)?
(je souhaite faire ensuite dans le terminal:
wget "ce qui a été récupéré"
merci de votre aide
Hors ligne
#2 Le 03/01/2019, à 07:16
- pingouinux
Re : saisir des caractères d'un fichier texte à un emplacement précis
Bonjour,
Ce serait plus facile de trouver une solution si tu montrais un exemple.
Hors ligne
#3 Le 03/01/2019, à 09:31
- nam1962
Re : saisir des caractères d'un fichier texte à un emplacement précis
Si ton fichier test.txt est :
truc
bidule
#
bla
hop
blu
dieze
uh
Et les expressions bla et blu
Tu peux faire :
awk '/^bla$/,/^blu$/ { print }' test.txt
]$ awk '/^bla$/,/^blu$/ { print }' test.txt
bla
hop
blu
Dernière modification par nam1962 (Le 03/01/2019, à 09:32)
[ Modéré ]
Hors ligne
#4 Le 03/01/2019, à 10:12
- diesel
Re : saisir des caractères d'un fichier texte à un emplacement précis
Bonjour,
Ce serait plus facile de trouver une solution si tu montrais un exemple.
+1
Parce que si ton fichier est comme ça (par exemple) :
toto tutu titi
tata tutu titi toto
toto
tutu
tutu
titi toto tutu
toto tata
tutu
et que tu veux (toujours par exemple) ce qu'il y a entre toto et tutu, bien malin celui qui saura donner la bonne réponse.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#5 Le 03/01/2019, à 14:10
- Watael
Re : saisir des caractères d'un fichier texte à un emplacement précis
print est l'opération par défaut de awk, il n'est pas toujours utile de l'indiquer; en l'occurrence, ce ne l'est pas.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#6 Le 03/01/2019, à 14:42
- nam1962
Re : saisir des caractères d'un fichier texte à un emplacement précis
Merci de la précision
Par contre sur la même logique, j'ai cherché à exclure les expressions qui délimitent (bla et blu) et rien trouvé d'élégant, juste cette bouse :
awk '/^bla$/,/^blu$/' test.txt | awk '!/bla$/' | awk '!/blu$/'
[ Modéré ]
Hors ligne
#7 Le 03/01/2019, à 15:36
- credenhill
Re : saisir des caractères d'un fichier texte à un emplacement précis
hello
$ awk '/^bla$/,/^blu$/ {if($0 !~ /^bla|^blu/) print }' fichier
If you don’t want to operate on these records, you can write if statements in the rule’s action to distinguish them from the records you are interested in.
https://www.gnu.org/software/gawk/manua … anges.html
Hors ligne
#8 Le 03/01/2019, à 16:10
- nam1962
Re : saisir des caractères d'un fichier texte à un emplacement précis
Merci
Je trouve les manuels de awk et sed aussi clairs et intuitifs que les commandes elles-même
[ Modéré ]
Hors ligne
#9 Le 03/01/2019, à 22:17
- qolepam
Re : saisir des caractères d'un fichier texte à un emplacement précis
avec sed,j'ai vu sur internet que c'est possible:
voir cette page web:
https://www.cyberciti.biz/faq/sed-display-text/
mais en écrivant dans le terminal:
sed -n '/début/,/fin/p' test.txt
cela ne donne rien.
Peut-on me corriger cette commande sed?
merci
Hors ligne
#10 Le 03/01/2019, à 23:02
- Watael
Re : saisir des caractères d'un fichier texte à un emplacement précis
on n'a toujours pas de fichier exemple en entrée.
là, on est dans l'extrapolation. autant dire que certains ont peut-être bossé pour rien.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#11 Le 04/01/2019, à 00:09
- qolepam
Re : saisir des caractères d'un fichier texte à un emplacement précis
le fichier test;txt contient:
au début de la journée se leva le Soleil.
La lumière du jour pris fin lorsque l'étoile se coucha
De toute façon avec awk ,je n'y arrive pas avec ce qui a été posté précédemment
Dernière modification par qolepam (Le 04/01/2019, à 00:12)
Hors ligne
#12 Le 04/01/2019, à 00:51
- Watael
Re : saisir des caractères d'un fichier texte à un emplacement précis
et le résultat attendu est...
?
parce que...
?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#13 Le 04/01/2019, à 01:27
- qolepam
Re : saisir des caractères d'un fichier texte à un emplacement précis
le résultat attendu est:
(espace)de la journée se leva le Soleil.
La lumière du jour pris(espace)
J'en profite pour redemander en modifiant le fichier test en test2 contenant:
Au début de la journée se leva le Soleil.
C'est alors que tu commença le début de cet exercice.Trop difficile pour toi,tu le termineras
au moment où la lumière du jour prendra fin vers 22 heures.
le résultat attendu sera alors
cas 1):
(espace)de la journée se leva le Soleil.
C'est alors que tu commença le début de cet exercice.Trop difficile pour toi,tu le termineras
au moment où la lumière du jour prendra(espace)
cas 2):
(espace)de cet exercice.Trop difficile pour toi,tu le termineras
au moment où la lumière du jour prendra(espace)
je souhaiterais avoir la solution pour ces 2 cas
merci
Hors ligne
#14 Le 04/01/2019, à 05:38
- Watael
Re : saisir des caractères d'un fichier texte à un emplacement précis
parce que...
?
quels sont les "repères" de début et de fin ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#15 Le 04/01/2019, à 07:21
- pingouinux
Re : saisir des caractères d'un fichier texte à un emplacement précis
python est bien adapté à ce cas. Voici script.py :
#!/usr/bin/env python3
import sys, re
with open(sys.argv[1],'r') as f: txt=f.read()
chercher='début(.*)fin(?s)'
print('\ncas 1):\n')
k=re.search(chercher,txt)
if k: print(k.group(1))
print('\ncas 2):\n')
k=re.search('début.*'+chercher,txt)
if k: print(k.group(1))
À appeler ainsi :
./script.py le_fichier_d_entrée
Édité :
Et pour chercher à partir de la nième occurrence de début :
#!/usr/bin/env python3
import sys, re
with open(sys.argv[1],'r') as f: txt=f.read()
n=int(sys.argv[2])
chercher='(début.*?){%s}(.*)fin(?s)'%n
k=re.search(chercher,txt)
if k: print(k.group(2))
À appeler ainsi :
- pour le cas 1)
./script.py le_fichier_d_entrée 1
- pour le cas 2)
./script.py le_fichier_d_entrée 2
Dernière modification par pingouinux (Le 04/01/2019, à 11:24)
Hors ligne
#16 Le 04/01/2019, à 14:16
- qolepam
Re : saisir des caractères d'un fichier texte à un emplacement précis
cas 3):
pour chercher à partir de la n-ième occurence de début jusqu'à la p-ième occurence de fin?
scrypt python?
merci
Hors ligne
#17 Le 04/01/2019, à 14:28
- nam1962
Re : saisir des caractères d'un fichier texte à un emplacement précis
Ce ne seraient pas des exercices que tu as à faire ?
[ Modéré ]
Hors ligne
#18 Le 04/01/2019, à 20:31
- Watael
Re : saisir des caractères d'un fichier texte à un emplacement précis
devine !
mais j'apprécie la subtilité « Au début... pris fin... »
ça m'avait échappé.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#19 Le 04/01/2019, à 21:53
- pingouinux
Re : saisir des caractères d'un fichier texte à un emplacement précis
cas 3):
pour chercher à partir de la n-ième occurence de début jusqu'à la p-ième occurence de fin?
scrypt python?
Oui, mais il faut savoir comment sont structurées les occurrences de début et de fin.
Le mieux est que tu donnes un exemple de fichier de départ, et le résultat que tu en attends.
Hors ligne
#20 Le 04/01/2019, à 23:27
- qolepam
Re : saisir des caractères d'un fichier texte à un emplacement précis
exemple de fichier texte pour le cas 3):
Au début de la journée se leva le Soleil.
C'est alors que tu commença le début de cet exercice.Trop difficile pour toi,tu le termineras
au moment où la lumière du jour prendra fin vers 22 heures.
Comme tu es paresseux,tu laisseras ton prof faire la fin de cet exercice
2 occurrences de début et de fin.
Je souhaite que cela me retourne:
a)2ème occurrence de début et 2ème occurrence de fin
(espace)de cet exercice.Trop difficile pour toi,tu le termineras
au moment où la lumière du jour prendra fin vers 22 heures.
Comme tu es paresseux,tu laisseras ton prof faire la(espace)
b)1ère occurrence de début et 1ère occurence de fin
(espace)de la journée se leva le Soleil.
C'est alors que tu commença le début de cet exercice.Trop difficile pour toi,tu le termineras
au moment où la lumière du jour prendra(espace)
Dernière modification par qolepam (Le 04/01/2019, à 23:50)
Hors ligne
#21 Le 05/01/2019, à 07:09
- pingouinux
Re : saisir des caractères d'un fichier texte à un emplacement précis
$ cat script.py
#!/usr/bin/env python3
import sys, re
k=0
k+=1; fic=sys.argv[k]
k+=1; nd=int(sys.argv[k])
k+=1; nf=int(sys.argv[k])
td='début'
tf='fin'
fmt='(%s.*?){%s}(.*)(?s)'
cherche_deb=fmt%(td,nd)
cherche_fin=fmt%(tf,nf)
with open(fic,'r') as f: txt=f.read()
d=re.search(cherche_deb,txt)
deb=d.start(2)
f=re.search(cherche_fin,txt)
fin=f.start(2)-len(tf)
print(txt[deb:fin])
$ ./script.py fichier.txt 2 2
de cet exercice.Trop difficile pour toi,tu le termineras
au moment où la lumière du jour prendra fin vers 22 heures.
Comme tu es paresseux,tu laisseras ton prof faire la
$ ./script.py fichier.txt 1 1
de la journée se leva le Soleil.
C'est alors que tu commença le début de cet exercice.Trop difficile pour toi,tu le termineras
au moment où la lumière du jour prendra
Il reste à t'assurer que les occurrences de début et de fin que tu demandes existent bien, et que la première précède la seconde.
Hors ligne