Pages : 1
#1 Le 18/02/2015, à 15:56
- WAJIH
[Résolu] Commande linux
Bonjour
pour des besoins fonctionnel j'aimerai savoir comment remplacer la chaine de caractère (elle est dans une seule ligne) ci dessous
2015-02-17 01:01:14. 92732|INFO |bscsdriver:15|bscsDriver|49374548|Header data DECODED in RECEIVED data <HEADER_COOKIE^@^@^@1^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@EDIFACT^@^@^@^@^@^@^@^@^@1#1^@^@^@^@^@^@^@^@^@^@^@^@^@GMD^@^@^@^@^@SWT_DEF^@1629^@^@^@^@^@^@^@^@^@^@^@^@49374548^@^@^@^@^@^@^@^@MDCMD^@^@^@^@^@^@^@^@^@^@^@1581^@^@^@^@^@^@^@^@^@^@^@^@UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0101+00000049374548'
par juste
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0101+00000049374548'
sachant que plusieurs occurrences de ce type sont dans un seul fichier avec des paramètres (date ,@49374548^@,..) sont variables .
Merci de me débloquer .
Dernière modification par WAJIH (Le 20/02/2015, à 10:49)
Hors ligne
#2 Le 18/02/2015, à 17:27
- Hizoka
Re : [Résolu] Commande linux
Salut,
Si ce que tu veux recuperer est toujours à la fin :
a="2015-02-17 01:01:14. 92732|INFO |bscsdriver:15|bscsDriver|49374548|Header data DECODED in RECEIVED data <HEADER_COOKIE^@^@^@1^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@EDIFACT^@^@^@^@^@^@^@^@^@1#1^@^@^@^@^@^@^@^@^@^@^@^@^@GMD^@^@^@^@^@SWT_DEF^@1629^@^@^@^@^@^@^@^@^@^@^@^@49374548^@^@^@^@^@^@^@^@MDCMD^@^@^@^@^@^@^@^@^@^@^@1581^@^@^@^@^@^@^@^@^@^@^@^@UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0101+00000049374548'"
var="${a##*@}" # pour virer tout jusqu'au dernier @
var="${var:-1}" # Pour enlever le ' de fin
echo "${var}"
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0101+00000049374548
Sinon, donne d'autres exemples histoire qu'on trouve les points communs.
et dans le cas où il y a plusieurs lignes :
while read ligne
do
var="${ligne##*@}" # pour virer tout jusqu'au dernier @
var="${var:-1}" # Pour enlever le ' de fin
echo "${var}"
done < Fichier.txt
Dernière modification par Hizoka (Le 18/02/2015, à 17:28)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 18/02/2015, à 17:32
- serged
Re : [Résolu] Commande linux
En supputant que les ^@ sont du binaire, déjà on peut filtrer par strings :
strings fichier
va déjà "nettoyer" le fichier des parasites.
Ensuite tu peux filtrer par grep. Par exemple, si ta chaîne contient toujours UNB, tu peux faire :
strings fichier|grep UNB
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
Hors ligne
#4 Le 18/02/2015, à 18:28
- Hizoka
Re : [Résolu] Commande linux
merci pour la commande strings
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 18/02/2015, à 18:38
- WAJIH
Re : [Résolu] Commande linux
bonjour et merci pour votre retour
enfait j'ai plusieurs occurrences de ce type
2015-02-17 08:36:34.269472|INFO |bscsdriver:15|bscsDriver|49403752|Header data DECODED in RECEIVED data <HEADER_COOKIE^@^@^@1^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@EDIFACT^@^@^@^@^@^@^@^@^@6#3^@^@^@^@^@^@^@^@^@^@^@^@^@GMD^@^@^@^@^@SWT_DEF^@1159^@^@^@^@^@^@^@^@^@^@^@^@49403752^@^@^@^@^@^@^@^@MDCMD^@^@^@^@^@^@^@^@^@^@^@1111^@^@^@^@^@^@^@^@^@^@^@^UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150219:0837+00000049403766'
aezerzrzrrdfdfffffffffff
addcdedffdfdfdfdfd
cdcedcddvdfvfrgrgtgtgtgtgtgt
motif_deffrfrflfrfrfrf
2015-02-17 08:37:34.269472|INFO |bscsdriver:15|bscsDriver|49403752|Header data DECODED in RECEIVED data <HEADER_COOKIE^@^@^@1^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@EDIFACT^@^@^@^@^@^@^@^@^@6#3^@^@^@^@^@^@^@^@^@^@^@^@^@GMD^@^@^@^@^@SWT_DEF^@1159^@^@^@^@^@^@^@^@^@^@^@^@49403752^@^@^@^@^@^@^@^@MDCMD^@^@^@^@^@^@^@^@^@^@^@1111^@^@^@^@^@^@^@^@^@^@^@^@UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049403752'
cdcfcfrgtgtgtgtgtgtgtg
vfvfvffvgtgtgtgggggggggttgtgtgtgtg
motif_deffrfrflfrfrfrf
2015-02-17 08:37:53.532390|INFO |bscsdriver:15|bscsDriver|49397839|Header data DECODED in RECEIVED data <HEADER_COOKIE^@^@^@1^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@EDIFACT^@^@^@^@^@^@^@^@^@1#1^@^@^@^@^@^@^@^@^@^@^@^@^@GMD^@^@^@^@^@SWT_DEF^@1628^@^@^@^@^@^@^@^@^@^@^@^@49397839^@^@^@^@^@^@^@^@MDCMD^@^@^@^@^@^@^@^@^@^@^@1580^@^@^@^@^@^@^@^@^@^@^@^@UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049397839'
aaaaaaaaaa
facrcrfrfcffrvrfvrf
motf_rfrfrfrfrfr
je vais appliquer votre solution juste pour les lignes qui commencent par une date (évidement 2015-xx-xx) avec insertion d'une ligne vide à la fin de la ligne qui commençant par "motif"
Résultat voulu
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150219:0837+00000049403766'
aezerzrzrrdfdfffffffffff
addcdedffdfdfdfdfd
cdcedcddvdfvfrgrgtgtgtgtgtgt
motif_deffrfrflfrfrfrf
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150214:0837+00000049403752'
cdcfcfrgtgtgtgtgtgtgtg
motif_vfvfvffvgtgtgtgggggggggttgtgtgtgtg
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049397839'
aaaaaaaaaa
facrcrfrfcffrvrfvrf
motf_rfrfrfrfrfr
Merci d'avance
Hors ligne
#6 Le 18/02/2015, à 19:16
- Hizoka
Re : [Résolu] Commande linux
utilise les balises CODE pour plus de lisibilité.
cat fichier
2015-02-17 08:36:34.269472|INFO |bscsdriver:15|bscsDriver|49403752|Header data DECODED in RECEIVED data <HEADER_COOKIE^@^@^@1^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@EDIFACT^@^@^@^@^@^@^@^@^@6#3^@^@^@^@^@^@^@^@^@^@^@^@^@GMD^@^@^@^@^@SWT_DEF^@1159^@^@^@^@^@^@^@^@^@^@^@^@49403752^@^@^@^@^@^@^@^@MDCMD^@^@^@^@^@^@^@^@^@^@^@1111^@^@^@^@^@^@^@^@^@^@^@^UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150219:0837+00000049403766'
aezerzrzrrdfdfffffffffff
addcdedffdfdfdfdfd
cdcedcddvdfvfrgrgtgtgtgtgtgt
motif_deffrfrflfrfrfrf
2015-02-17 08:37:34.269472|INFO |bscsdriver:15|bscsDriver|49403752|Header data DECODED in RECEIVED data <HEADER_COOKIE^@^@^@1^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@EDIFACT^@^@^@^@^@^@^@^@^@6#3^@^@^@^@^@^@^@^@^@^@^@^@^@GMD^@^@^@^@^@SWT_DEF^@1159^@^@^@^@^@^@^@^@^@^@^@^@49403752^@^@^@^@^@^@^@^@MDCMD^@^@^@^@^@^@^@^@^@^@^@1111^@^@^@^@^@^@^@^@^@^@^@^@UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049403752'
cdcfcfrgtgtgtgtgtgtgtg
vfvfvffvgtgtgtgggggggggttgtgtgtgtg
motif_deffrfrflfrfrfrf
2015-02-17 08:37:53.532390|INFO |bscsdriver:15|bscsDriver|49397839|Header data DECODED in RECEIVED data <HEADER_COOKIE^@^@^@1^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@EDIFACT^@^@^@^@^@^@^@^@^@1#1^@^@^@^@^@^@^@^@^@^@^@^@^@GMD^@^@^@^@^@SWT_DEF^@1628^@^@^@^@^@^@^@^@^@^@^@^@49397839^@^@^@^@^@^@^@^@MDCMD^@^@^@^@^@^@^@^@^@^@^@1580^@^@^@^@^@^@^@^@^@^@^@^@UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049397839'
while read ligne
do
var="${ligne##*@}" # pour virer tout jusqu'au dernier @
var="${var:-1}" # Pour enlever le ' de fin
echo "${var}"
done < fichier
^UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150219:0837+00000049403766'
aezerzrzrrdfdfffffffffff
addcdedffdfdfdfdfd
cdcedcddvdfvfrgrgtgtgtgtgtgt
motif_deffrfrflfrfrfrf
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049403752'
cdcfcfrgtgtgtgtgtgtgtg
vfvfvffvgtgtgtgggggggggttgtgtgtgtg
motif_deffrfrflfrfrfrf
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049397839'
ce que je t'avais dit est pas trop mal
while read ligne
do
unset var
if [[ $(grep "UNB+UNOB" <<< "${ligne}") ]]
then
var="${ligne##*@}" # pour virer tout jusqu'au dernier @
var="${var:-1}" # Pour enlever le de fin
var="\n${var}"
fi
echo -e "${var:-${ligne}}"
done < fichier
^UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150219:0837+00000049403766'
aezerzrzrrdfdfffffffffff
addcdedffdfdfdfdfd
cdcedcddvdfvfrgrgtgtgtgtgtgt
motif_deffrfrflfrfrfrf
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049403752'
cdcfcfrgtgtgtgtgtgtgtg
vfvfvffvgtgtgtgggggggggttgtgtgtgtg
motif_deffrfrflfrfrfrf
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0837+00000049397839'
Dernière modification par Hizoka (Le 18/02/2015, à 19:20)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 18/02/2015, à 19:42
- pingouinux
Re : [Résolu] Commande linux
Bonsoir,
Autre méthode
sed -r 's/.*[@^]([^^@]+)$/\1/' fichier
Hors ligne
#8 Le 19/02/2015, à 14:08
- WAJIH
Re : [Résolu] Commande linux
Merci pour vos retour et aides ,j'ai presque finaliser le parsing de mon fameux fichier
ça reste juste la ligne ci dessous (dans une seule ligne)
2015-02-17 01:01:33.383964|INFO |blalalba|blablabla|49397705|Header data DECODED in RECEIVED data <bslbslsbs#11blablablablablablabddjkod1923UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0101+00000049397705'
j'aimerai avoir une résultat
<ligne vide>
UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0101+00000049397705'
c'est par analogie le substr(chaine,instr(patern)) dans plsql
Merci pour votre aide
Dernière modification par WAJIH (Le 19/02/2015, à 16:57)
Hors ligne
#9 Le 19/02/2015, à 18:00
- WAJIH
Re : [Résolu] Commande linux
bonjour je partage avec vous ma solution fonctionnel
#La chaine où l'on cherche un élement.
chaine="2015-02-17 01:02:52.788184|INFO |blblblblbl:15|Driver|49374549|Header data DECODED in RECEIVED data <HEADER_COOKIE1SEDR1#1GMDSWT_DEF162949374549MDCMD1581UNB+UNOB:3+BSCS-GMD+BSCS-VMD+150217:0102+00000049374549'"
#L'élement recherché.
recherche="UNB+UNOB"
#On enleve la valeur de la variable "recherche" et tout ce qui suit dans la variable chaine.
debut_chaine="${chaine%%${recherche}*}"
#On calcule la longueur de la nouvelle chaine. ça longueur +1 correspond à position de l'élement recherché.
position=$((${#debut_chaine}))
#Si l'élément recherché ne se trouve pas dans la chaine, la valeur de "position" sera égale à la longueur de la chaine. Il faut donc, dans ce cas, mettre la valeur de "position" à "0".
if [ "$position" -eq $((${#chaine}+1)) ]; then
position="0"
fi
#On affiche le resultat.
echo -e "#Fin#\n" ${chaine:${position}}
Merci a tous
Hors ligne
#10 Le 19/02/2015, à 18:17
- Hizoka
Re : [Résolu] Commande linux
Tant mieux si tu as ta solution
Par contre, utilise les balises CODE !!
Car c'est vraiment difficile à lire...
Ajoute [resolu] dans le titre de ton topic.
Bonne continuation
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#11 Le 20/02/2015, à 10:50
- WAJIH
Re : [Résolu] Commande linux
Résolu et Merci pour vos aides
Hors ligne