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
7 Réponses :
Utilisation de Perl 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
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.
avec simple ou p> awk code> solution:
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] + code> à la place de
src_ [0-9] + / code> 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] + / code> sur
/ src _ [^] [0-9a-za-z] + / code> une fois?
avec bash: sortie: p>
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
Vous pouvez éviter le chat code>, mais ceci ramassera également des trucs comme
vsrc_blabla code>
Je voulais publier la même réponse, uniquement en utilisant grep "^ src _" code> éviter
vsrc_blabla code>
Ceci pourrait fonctionner pour vous (GNU SED):
sed '/\n/!s/src_[^,]*/\n&\n/g;/^src_/P;D' file
Un simple retour GREP uniquement ( -o code>) les mots correspondants (
-w code>)
Rechercher ^ src_xxx, code>,
, src_xxx, code> et
, src_xxx $ code>, et imprimer uniquement la correspondance sans le
, .
sed -rn 's/.*(,|^)(src_[^,]*)(,|$).*/\2/p'
Avec GNU Grep:
grep -po 'src _. *? \ B' fichier code>?
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" code>?
Quelle partie de cette question implique
bash code> 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?