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 03/01/2019, à 02: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, à 08: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, à 10: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, à 10:32)


[ Modéré ]

Hors ligne

#4 Le 03/01/2019, à 11:12

diesel

Re : saisir des caractères d'un fichier texte à un emplacement précis

pingouinux a écrit :

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, à 15: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.

Hors ligne

#6 Le 03/01/2019, à 15:42

nam1962

Re : saisir des caractères d'un fichier texte à un emplacement précis

Merci de la précision smile
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, à 16: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, à 17:10

nam1962

Re : saisir des caractères d'un fichier texte à un emplacement précis

Merci smile
Je trouve les manuels de awk et sed aussi clairs et intuitifs que les commandes elles-même big_smile


[ Modéré ]

Hors ligne

#9 Le 03/01/2019, à 23: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 04/01/2019, à 00: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. sad

là, on est dans l'extrapolation. autant dire que certains ont peut-être bossé pour rien. mad


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 04/01/2019, à 01: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, à 01:12)

Hors ligne

#12 Le 04/01/2019, à 01: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.

Hors ligne

#13 Le 04/01/2019, à 02: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, à 06: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.

Hors ligne

#15 Le 04/01/2019, à 08: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, à 12:24)

Hors ligne

#16 Le 04/01/2019, à 15: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, à 15: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, à 21: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é. sad


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#19 Le 04/01/2019, à 22:53

pingouinux

Re : saisir des caractères d'un fichier texte à un emplacement précis

qolepam #16 a écrit :

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 05/01/2019, à 00: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 05/01/2019, à 00:50)

Hors ligne

#21 Le 05/01/2019, à 08: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