2012-10-02 8 views
2

J'ai un exemple:AWK: comment améliorer cette expression régulière?

[email protected]:~$ echo ",article{gjn2010jucs, Author = {Grzegorz J. Nalepa}, " | awk '{gsub(/[^,],.*/,""); print }' 
,article{gjn2010juc 
[email protected]:~$ 

Comment améliorer l'expression régulière pour obtenir le résultat:

,article{gjn2010jucs 
+0

Vous devriez être beaucoup plus précis sur vos besoins ici. –

+1

De quelles informations supplémentaires ai-je besoin? Je parle de ce cas particulier. – Tedee12345

+1

'awk -F, '{printf',% s \ n '', $ 2} ''? – twalberg

Répondre

1

Si vous cherchez à améliorer votre expression régulière: vous aurez besoin d'utiliser des groupes de capture et ce ne sont pas des caractéristiques disponibles dans sub() ou gsub(). Vous devrez utiliser gensub(). Vous pouvez en savoir plus sur les fonctions de manipulation de chaînes here.

J'utiliser gensub() comme ceci:

awk '{ print gensub(/(,[^,]+).*/,"\\1", "g") }' 

Test:

echo ",article{gjn2010jucs, Author = {Grzegorz J. Nalepa}, " | awk '{ print gensub(/(,[^,]+).*/,"\\1", "g") }' 

Résultats:

,article{gjn2010jucs 
+0

Merci pour cette bonne solution. Travailler en gawk, mais ça ne marche pas avec mawk. – Tedee12345

+0

@ Tedee12345: Vous avez raison. 'mawk' ne vient pas avec certaines fonctions, y compris' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' - – Steve

1

Sinon, au lieu de trouver des trucs à jeter, trouver des trucs pour garder: conservez la première virgule et tous les caractères non-virgules suivants:

gawk 'match($0, /^,[^,]+/, ary) {print ary[0]}' 

mise à jour mawk:

mawk 'match($0, /^,[^,]+/) {print substr($0, RSTART, RLENGTH)}' 
+0

Merci pour cette bonne solution. Travailler en gawk, mais ça ne marche pas avec mawk. – Tedee12345

+0

@ Tedee12345, mis à jour pour mawk –

+0

Merci pour un autre exemple. – Tedee12345

Questions connexes