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/09/2014, à 10:40

Cross_Azriel

Problème commande sed

Hello tout le monde, j'ai une petite question concernant la commande "sed" dans un script SHELL.
Je m'explique:
Je voudrai faire un petit script pour decrypter des messages. Il me faut donc par exemple pouvoir remplacer la lettre a par b, b par c etc...
mon code ressemble donc à ça:

#!/system/bin/mksh

echo "votre texte a traduire est: "
read cde

echo "votre texte en Xjf7 est :" 
echo $code | sed -e 's/a/b/'   

ce code fonctionne bien, mais le problème, s'est quand je rajoute une lettre à traduire:

echo $code | sed -e 's/a/b/' 's/b/c/' 's/c/d/'   

il m'affiche un message d'erreur. Comment dois-je donc faire pour mettre toute les lettres qui doivent êtres changée avec la commade sed (ou alors si il y a une commande qui est plus appropriée).

Merci infiniment de cotre aide!
Cordialement, Cross_Azriel.

Hors ligne

#2 Le 04/09/2014, à 11:05

Banhart

Re : Problème commande sed

Salut,

Tu peux essayer de le faire en plusieurs passes :

echo $code | sed -e 's/a/b/'  
echo $code | sed -e 's/b/c/' 
echo $code | sed -e  's/c/d/'   

ou mieux

http://www.thegeekstuff.com/2009/10/uni … -commands/

Dernière modification par Banhart (Le 04/09/2014, à 11:05)

Hors ligne

#3 Le 04/09/2014, à 11:13

pingouinux

Re : Problème commande sed

Bonjour,
Utilise plutôt la commande tr :

$ code="mon code à moi"

$ tr "abcdefghij" "bcdefghija" <<<"$code"
mon doef à moj

Ajouté :
Avec ton exemple, et en utilisant sed :

sed 's/c/d/g;s/b/c/g;s/a/b/g' <<<"$code"

Dernière modification par pingouinux (Le 04/09/2014, à 11:18)

Hors ligne

#4 Le 04/09/2014, à 11:50

Cross_Azriel

Re : Problème commande sed

@Banhart:
Ton code me donne

b
a
a
a

Et j'avais déjà essayer ce qui est décris dans le lien, mais sans succès.

@Pingouinux
A la base je voulais le faire avec la commande tr. Problème, je veut remplacer par exemple le a par #!, et je n'y arrive pas avec la commande tr.

Avec ton code sed, si je fais b, il me sort a. Mais le truc s'est que si je fais a, il me sort a alors que moi je voudrai qu'il devienne  b !

Dernière modification par Cross_Azriel (Le 04/09/2014, à 11:51)

Hors ligne

#5 Le 04/09/2014, à 12:04

pingouinux

Re : Problème commande sed

Peux-tu montrer le texte de départ, celui que tu obtiens, et celui que tu veux obtenir ?

Hors ligne

#6 Le 04/09/2014, à 12:55

nesthib

Re : Problème commande sed

Veux-tu décrypter ou déchiffrer ? Le premier signifie que tu n'as pas la clé pour déchiffrer le message et que tu dois donc la casser, le second signifie que tu as la clé.
Ton système de chiffrement est appelé Chiffre de César. Il s'agit d'une substitution mono-alphabétique, qui ne présente aucune sécurité car il est extrêmement facile à casser par analyse de fréquence des lettres ou par test de toutes les possibilités (26). Il y a d'ailleurs une commande pour casser ce chiffrement :

caesar <<<"Uwua wkl mf ewkksyw kwujwl"

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 04/09/2014, à 14:03

Cross_Azriel

Re : Problème commande sed

Alors je voudrai que:
A=%
B=#@
C=3D
E=6f

En gros, il n'y a aucune logique, s'est pour ça que je voulais faire un script. L'utilisateur entre un texte et une commande change les caractères saisi par ceux que j'aurai moi-même définis !

Dernière modification par Cross_Azriel (Le 04/09/2014, à 14:03)

Hors ligne

#8 Le 04/09/2014, à 14:22

pingouinux

Re : Problème commande sed

$ sed 's/A/%/g;s/B/#@/g;s/C/3D/g;s/E/6f/g' <<<"AH, C'EST BIZARRE"
%H, 3D'6fST #@IZ%RR6f

Hors ligne

#9 Le 04/09/2014, à 15:45

Cross_Azriel

Re : Problème commande sed

1:Merci beaucoup, ça fonctionnel niquel !
Grâce à toi j'ai compris ce que j'avais fais de faux. Je voulais également intégrer le décodage en faisant:

echo "votre texte est :" 
echo $code |sed 's/A/%/g; s/B/#@/g; s/C/3D/g; s/E/6f/g; 's/%/A/g; s/#@/B/g; s/3D/C/g; s/6f/E/g '

Mais en fait il fallait faire:

echo "votre texte en X#$@ est :" 
echo $code |sed 's/A/%/g; s/B/#@/g; s/C/3D/g; s/E/6f/g'

echo "votre texte en francais est :"
echo $code | sed 's/%/A/g; s/#@/B/g; s/3D/C/g; s/6f/E/g '

Mais y a t-il un autre moyen de coder et décoder, sur seulement une ligne de code (Comme l'exemple 1) ?

2:Pourrez-vous m'indiquer la commende afin de relancer automatiquement le script une fois le texte coder/décoder (qu'il me demande à nouveau de saisir un texte, sans devoir lancer à nouveau le script) ?

Dernière modification par Cross_Azriel (Le 04/09/2014, à 16:11)

Hors ligne

#10 Le 04/09/2014, à 15:55

pingouinux

Re : Problème commande sed

1)

echo $code |sed 's/A/%/g; s/B/#@/g; s/C/3D/g; s/E/6f/g; 's/4/a/g; s/#/B/g; s/3D/C/g; s/6f/E/g '

Ton décodage n'est pas symétrique de ton codage, est-ce voulu ?

Sur une seule ligne, suivant l'ordre des s/../../g;, tu vas décoder une partie de ce que tu viens de coder.

2)

while true; do read -p "Entrer un texte : " txt; sed 's/A/%/g;s/B/#@/g;s/C/3D/g;s/E/6f/g' <<<"$txt"; done

Ctrl-C pour sortir de la boucle.

Hors ligne

#11 Le 04/09/2014, à 16:25

Cross_Azriel

Re : Problème commande sed

Oups, non c'étais pas fais exprès !
Eu...comment ça ? Je ne suis pas sur de comprendre ^^"

Génial, le code fonctionne parfaitement, mais juste avec

while true; do

Au début du script.Une erreur s'affiche si je fais:

while true; do read -p 

Hors ligne

#12 Le 04/09/2014, à 16:42

pingouinux

Re : Problème commande sed

Eu...comment ça ? Je ne suis pas sur de comprendre ^^"

A  =>  %;    4  =>  A
B  =>  #@;   #  =>  B

Au début du script.Une erreur s'affiche si je fais:

while true; do read -p 

Normal, la commande read est incomplète.

Hors ligne

#13 Le 04/09/2014, à 16:59

Cross_Azriel

Re : Problème commande sed

Ah, oui, j'ai corriger ça !
Donc pas moyen de faire coder et décoder en une seul ligne sed ? smile

Alors

while true; do
...

done

C'est juste (parce que ça fonctionne) mais est-ce que je risque d'avoir des problèmes plus tard vu que j'utilise pas la commande read ?

Vraiment, merci énormément pour ton aide et ta patience ! big_smile

Hors ligne

#14 Le 04/09/2014, à 17:03

pingouinux

Re : Problème commande sed

mais est-ce que je risque d'avoir des problèmes plus tard vu que j'utilise pas la commande read ?

Tu peux mettre ce que tu veux dans la boucle, mais il faut que tu y lises le texte à coder ou décoder.

Hors ligne