Rechercher : dans
Par :

[SHELL] Extraire une chaine de caractere

Dernière réponse le 26 déc 2007 à 16:04:08 karineb77, le 26 déc 2007 à 12:59:52 
 Signaler ce message aux modérateurs

Bonjour,
Je cherche à extraire d'un fichier une chaine de caractere se trouvant sur la premiere ligne en position 57 et de longueur 5.
Je veux ensuite l'affecter à une variable pour pouvoir ensuite tester sa valeur.
Je voudrais également supprimer les espaces de cette chaine.

Comment faire ?
J'ai essayé avec awk mais je n'arrive pas à affecter le resultat à une variable externe en faisant cela
awk '{print substr($0,57,5)}' monfichier.txt | head -n1

Merci d'avance pour votre aide

Karine

Configuration: Windows XP
Firefox 2.0.0.4

Meilleures réponses pour « [SHELL] Extraire une chaine de caractere » dans :
Javascript - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractère Une chaîne de caractère est, comme son nom l'indique, une suite de caractères. On la représente par la suite de caractères encadrée par des guillemets simples (') ou doubles ("), sachant que les deux types de...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

jipicy, le 26 déc 2007 à 13:30:22

Salut,

Essaye avec "sed" :

var=$(sed -nre '1 {s/.{56}(.{5}).*/\1/; s/ //gp}' fichier)

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

jipicy, le 26 déc 2007 à 13:34:57

Quoi qu'avec "awk" ça donnerait plutôt :

awk 'NR==3 { print substr($0,57,5) }' fichier
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

3

karineb77, le 26 déc 2007 à 14:29:02

Merci pour tes réponses.
Pour awk, je pense plutôt qu'il faut tester NR==1 si je veux la première ligne ?

Sinon, je n'arrive pas à exécuter la commande sed :
quand je tape cette commande sed -ne '1 {s/.{56}(.{5}).*/\1/; s/ //gp}' monfichier,
j'ai le résultat suivant :
sed: Function 1 {s/.{56}(.{5}).*/\1/; s/ //gp} cannot be parsed.

Karine

Répondre à karineb77

4

jipicy, le 26 déc 2007 à 14:35:45

Oups sorry pour le numéro de ligne avec "awk" ;-((

Pour sed il faut absolument mettre le switch "-r" (sed -nre) pour employer l'expression sous cette forme (emploi des regex étendues), sinon il faut protéger certains caractères :

sed -ne '1 {s/.\{56\}\(.\{5\}\).*/\1/; s/ //gp}' monfichier
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

5

 karineb77, le 26 déc 2007 à 16:04:08

Hello,
Finalement, j'ai réussi en faisant comme cela car je n'arrivais pas à utiliser la commande sed que tu m'avais passée.

var=`awk 'NR==1 {print substr($0,57,5)}' $fic |sed 's/ *//'`

Il y a surement plus simple mais çà marche :-)

Karine

Répondre à karineb77