2 votes

Comment extraire une sous-chaîne dans les guillemets doubles en utilisant awk ou d'autres méthodes ?

Je veux vous extraire dans la chaîne d'échantillons :

See [ "you" later 

Cependant, mon résultat est faux :

 awk '{ sub(/.*\"/, ""); sub(/\".*/, ""); print }' <<< "See [ \"you\" later"

résultat :

 later

Dans awk ou d'autres méthodes, comment puis-je extraire la sous-chaîne dans les guillemets doubles ?

3voto

RavinderSingh13 Points 29608

1ère solution : Vous pouvez utiliser gsub fonction de awk ici. Il suffit de faire 2 substitutions avec NULL. 1ère jusqu'à la 1ère occurrence de " et ensuite substituer tout ce qui suit " à tout ce qui contient NULL et imprime cette ligne.

awk '{gsub(/^[^"]*"|".*/,"")} 1' Input_file


2ème solution : Utilisation de GNU grep solution. En utilisant son -oP pour imprimer les parties correspondantes et activer l'option regex PCRE respectivement. Avec la regex du début de la correspondance jusqu'à la toute première occurrence de " et en utilisant \K option permettant d'oublier la partie correspondante et de tout faire correspondre à nouveau juste avant la prochaine occurrence de " qui imprimera le texte entre 2 " selon les besoins.

grep -oP '^.*?"\K[^"]*' Input_file

2voto

anubhava Points 172509

Voici une solution en awk sans aucune regex :

s='See [ "you" later'
awk -F '"' 'NF>2 {print $2}' <<< "$s"

you

Ou un sed solution avec regex :

sed -E 's/[^"]*"([^"]*)".*/\1/' <<< "$s"
you

Un autre awk con match :

awk 'match($0, /"[^"]*"/) {print substr($0, RSTART+1, RLENGTH-2)}' <<< "$s"

you

2voto

Wiktor Stribiżew Points 100073

Vous pouvez également utiliser cut ici :

cut -d\" -f 2 <<< 'See [ "you" later '

Il divise la chaîne de caractères avec un guillemet double et obtient le deuxième élément.

Sortie :

you

Voir le Démonstration en ligne .

2voto

Daweo Points 10024

Utilisation de bash

IFS='"'
read -ra arr <<< "See [ \"you\" later"
echo ${arr[1]}

donne la sortie

you

Explication : utilisation IFS d'informer bash de se séparer à " lire le texte divisé dans un tableau arr imprimer le 2ème élément (qui est [1] como [0] indique le premier élément).

2voto

Ed Morton Points 25374

Juste quelques façons d'utiliser GNU awk pour :

multi-char RS y RT :

$ echo 'See [ "you" later' |
    awk -v RS='"[^"]*"' 'RT{ print substr(RT,2,length(RT)-2) }'
you

le 3ème arg à match() :

$ echo 'See [ "you" later' |
    awk 'match($0,/"([^"]*)"/,a){ print a[1] }'
you

gensub() (en supposant que la chaîne citée est toujours présente) :

$ echo 'See [ "you" later' |
    awk '{print gensub(/.*"([^"]*)".*/,"\\1",1)}'
you

FPAT :

$ echo 'See [ "you" later' |
    awk -v FPAT='[^"]*' 'NF>2{print $2}'
you

$ echo 'See [ "you" later' |
    awk -v FPAT='"[^"]*"' 'NF{print substr($1,2,length($1)-2)}'
you

patsplit():

$ echo 'See [ "you" later' |
    awk 'patsplit($0,f,/"[^"]*"/,s){print substr(f[1],2,length(f[1])-2)}'
you

le 4e arg à split() :

$ echo 'See [ "you" later' |
    awk 'split($0,f,/"[^"]*"/,s)>1{print substr(s[1],2,length(s[1])-2)}'
you

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X