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 04/08/2015, à 07:31

Bruno93200

ET et OU avec Stream Editor (SED)

Bonjour,
petit problème avec SED :

soit un gros fichier qui contient des lignes contenant AAA, BBB, CCC, etc.

je voudrais sélectionner les lignes qui m'intéressent et détruire les autres

je sais faire :
/AAA/d # détruire les lignes qui contiennent AAA
/AAA/!d  # détruire les lignes qui ne contiennent pas AAA
/BBB/!d  # détruire les lignes qui ne contiennent pas BBB
etc.

mais je ne sais pas extraire la liste des lignes qui contiennent AAA, BBB mais pas CCC, DDD

merci de votre aide,
Bruno

Hors ligne

#2 Le 04/08/2015, à 09:47

credenhill

Re : ET et OU avec Stream Editor (SED)

hello
supprime les lignes qui contiennent AAA  ou BBB mais pas CCC ou DDD

$ cat fichier
AAA 
AAA BBB
AAA BBB CCC
AAA BBB CCC DDD
$ sed '/AAA\|BBB/ {/CCC\|DDD/! d}' fichier
AAA BBB CCC
AAA BBB CCC DDD

Hors ligne

#3 Le 04/08/2015, à 15:32

ar barzh paour

Re : ET et OU avec Stream Editor (SED)

@credenhill
je n'arrive pas à faire fonctionner cette syntaxe
fichier :

AAA
AAA BBB
AAA BBB CCC
AAA BBB CCC DDD
AAA BBB DDD
CCC DDD
EEE
sed '/AAA\|BBB/ {/CCC\|DDD/! d}' fichierAAA BBB CCC
AAA BBB CCC DDD
AAA BBB DDD
CCC DDD
EEE

@Bruno93200
en deux fois :
sélection des lignes contenant AAA ou BBB

sed -n '/AAA\|BBB/p' fichier >f1

puis selection des lignes ne contenant pas CCC ou DDD

sed  '/CCC\|DDD/ d' f1>f2

mais on doit pouvoir faire en une seule passe !

sed -n '/AAA\|BBB/p' fichier >f1

cat f1
AAA
AAA BBB
AAA BBB CCC
AAA BBB CCC DDD
AAA BBB DDD
sed  '/CCC\|DDD/ d' f1>f2
cat f2
AAA
AAA BBB

Dernière modification par ar barzh paour (Le 04/08/2015, à 15:49)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#4 Le 04/08/2015, à 15:39

credenhill

Re : ET et OU avec Stream Editor (SED)

bizarre

$ cat fic
AAA
AAA BBB
AAA BBB CCC
AAA BBB CCC DDD
AAA BBB DDD
CCC DDD
EEE
$ sed -n '/AAA\|BBB/ {/CCC\|DDD/! p}'  fic
AAA
AAA BBB

Hors ligne

#5 Le 04/08/2015, à 15:55

ar barzh paour

Re : ET et OU avec Stream Editor (SED)

oui ça ca fonctionne

sed -n '/AAA\|BBB/ {/CCC\|DDD/! p}'  fichier

je ne connais pas l'utilisation des {......}

Dernière modification par ar barzh paour (Le 04/08/2015, à 15:58)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#6 Le 05/08/2015, à 07:54

credenhill

Re : ET et OU avec Stream Editor (SED)

ça permet de grouper les commandes

$ printf "%s\n" {1..5} | sed '1 s/$/ xx/; s/^/aa /'
aa 1 xx
aa 2
aa 3
aa 4
aa 5
$ printf "%s\n" {1..5} | sed '1 {s/$/ xx/; s/^/aa /}'
aa 1 xx
2
3
4
5

Hors ligne

#7 Le 05/08/2015, à 14:07

Bruno93200

Re : ET et OU avec Stream Editor (SED)

Bonjour,
j'ai testé

$ cat fic
AAA
AAA BBB
AAA BBB CCC
AAA BBB CCC DDD
AAA BBB DDD
CCC DDD
EEE
$ sed -n '/AAA\|BBB/ {/CCC\|DDD/! p}'  fic
AAA
AAA BBB

qui fonctionne, mais j'aurais voulu ne garder que les lignes qui contiennent AAA et BBB

le test suivant ne fonctionne pas bien :

/AAA\|CCC/ {/BBB\|DDD/! p}
AAA

au lieu de AAA CCC
que j'aurais souhaité

Merci de votre aide,
B.

au lieu de
AAA

Hors ligne

#8 Le 05/08/2015, à 14:59

credenhill

Re : ET et OU avec Stream Editor (SED)

comme ca ?

$ cat fichier
AAA
AAA BBB
AAA BBB CCC
AAA BBB CCC DDD
AAA BBB DDD
CCC DDD
EEE
$ sed -n '/AAA.*BBB\|BBB.*AAA/ {/CCC\|DDD/! p}' fichier
AAA BBB

Hors ligne