0
votes

Analyser la chaîne délimitée en utilisant awk et récupérez la chaîne correspondante

J'ai une variable de chaîne délimitée telle que mentionnée ci-dessous. Je voudrais grep une chaîne correspondante. J'ai trouvé des solutions possibles sur Internet, mais malheureusement, ils ne m'ont pas donné le résultat que je m'attendais. Pouvez-vous vous suggérer ou me corriger.

Input: 123,src_12,234,456
       1,23,34,src_23,4,56,7
       src_14,12
       12,3,5,src_5
Output: src_12
        src_23
        src_14
        src_5


5 commentaires

Avec GNU Grep: grep -po 'src _. *? \ B' fichier ?


Merci Cyrus pour éditer le texte et les commentaires. Je n'ai pas de fichier. L'entrée est une variable.


grep -po '\ bsrc _. *? \ b' <<< "$ variable" ?


Quelle partie de cette question implique bash shell et a besoin de la balise?


Désolé, ce n'est pas la façon dont Stackoverflow fonctionne. Les questions de la forme "Je veux faire x, veuillez me donner des conseils et / ou un code d'échantillon" sont considérés comme étant hors sujet. Veuillez visiter le centre d'aide et lire Comment Demander , et surtout lire Pourquoi "peut-il m'aider quelqu'un?" pas une question réelle?


7 Réponses :


0
votes

Utilisation de Perl xxx pré>

Si vous avez plus d'un SRC_ dans la même ligne, utilisez ci-dessous P>

$ export A="123,src_12,234,456,1,23,34,src_23,4,56,7,src_14,12,12,3,5,src_5,src_6,src_7,16,18"

$ perl -nle ' while( /(src_\d+)/g ) { print $1 } '  <<< "$A"
src_12
src_23
src_14
src_5
src_6
src_7

$ perl -le ' $_=$ENV{A}; while( /(src_\d+)/g ) { print $1 } '
src_12
src_23
src_14
src_5
src_6
src_7


2 commentaires

Oui .. Vous pouvez appeler Perl au milieu du programme Bash


Merci pour une réponse rapide @ stack0114106. Je ne veux pas augmenter la dépendance en utilisant Perl. Laissez-moi comprendre avec Bash. Si rien ne fonctionne, je vais utiliser votre solution.



1
votes

avec simple awk solution: xxx

ou xxx


6 commentaires

Lorsqu'il n'y a pas de scénarios de correspondance, il donne une première chaîne. Comment l'éviter


@Srinath, s'il vous plaît essayer d'exécuter une première commande uniquement qui devrait donner une sortie lorsqu'un match ne se trouve que.


La première déclaration échoue lorsque j'ai SRC_ABC (non numérique).


@srinath, essayez src_ [0-9a-za-z] + à la place de src_ [0-9] + / une fois et que je sache?


Cela a fonctionné partiel. Pour src_12_abc, je reçois SRC_12 seulement. J'ai besoin de données jusqu'à ce que le prochain délimiteur.


@srinath, changement / src_ [0-9] + / sur / src _ [^] [0-9a-za-z] + / une fois?



1
votes

avec bash: xxx

sortie: xxx


0 commentaires

1
votes

Utiliser TR

$ cat srinath.txt2
123,src_12,234,456
1,23,34,src_23,4,56,7
src_14,12
12,3,5,src_5
src_6,src_7,16,18

$ A=$(cat srinath.txt2)

$ tr ',' '\n' <<< "$A" | grep ^src
src_12
src_23
src_14
src_5
src_6
src_7


2 commentaires

Vous pouvez éviter le chat , mais ceci ramassera également des trucs comme vsrc_blabla


Je voulais publier la même réponse, uniquement en utilisant grep "^ src _" éviter vsrc_blabla



0
votes

Ceci pourrait fonctionner pour vous (GNU SED):

sed '/\n/!s/src_[^,]*/\n&\n/g;/^src_/P;D' file


0 commentaires

0
votes

Un simple retour GREP uniquement ( -o ) les mots correspondants ( -w ) xxx


0 commentaires

0
votes

Rechercher ^ src_xxx, code>, , src_xxx, code> et , src_xxx $ code>, et imprimer uniquement la correspondance sans le , .

sed -rn 's/.*(,|^)(src_[^,]*)(,|$).*/\2/p'


0 commentaires