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 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 wink


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 wink

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  smile

ç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 smile

#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 smile

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 smile smile

Hors ligne