Je suis coincé en essayant de faire quoi que ce soit juste après name=
, n'inclut que les espaces et les caractères alphanumériques.
par exemple.:
name=some value here
Je reçois
some value here
Je suis totalement nouveau dans ce domaine, le grep suivant correspond à tout, y compris le name=
.
grep 'name=.*' filename
Toute aide est très appréciée.
Comme détaillé ici , vous voulez une clause positive lookbehind, telle que:
grep -P '(?<=name=)[ A-Za-z0-9]*' filename
Le -P oblige grep à utiliser le dialecte Perl, sinon vous auriez probablement besoin d'échapper aux parenthèses. Vous pouvez également, comme indiqué ailleurs, ajouter le -o
paramètre pour imprimer uniquement ce qui correspond. La partie entre parenthèses spécifie que vous voulez des alphanumériques et des espaces.
L'avantage d'utiliser une clause lookbehind positive est que le texte "name =" ne fait pas partie de la correspondance. Si grep met en surbrillance le texte correspondant, il ne mettra en surbrillance que la partie alphanumérique (et les espaces). Le paramètre -o n'affichera pas non plus la partie "name =". Et, si vous faites la transition vers un autre programme comme sed qui pourrait capturer le texte et faire quelque chose avec lui, vous ne capturerez pas la partie "name =", bien que vous puissiez également le faire en utilisant la capture parenthess.
Essaye ça:
sed -n 's/^name=//p' filename
Il indique à sed de ne rien imprimer (-n) par défaut, de remplacer votre préfixe par rien et d'imprimer si la substitution se produit.
Bonus: si vous en avez vraiment besoin pour ne faire correspondre que les entrées avec uniquement des espaces et des caractères alphanumériques, vous pouvez aussi le faire:
sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename
Ici, nous avons ajouté un modèle pour faire correspondre les espaces et les caractères alphanumériques uniquement jusqu'à la fin de la ligne ($), et si nous faisons correspondre, nous substituons le groupe entre parenthèses et imprimons.
grep n'extrait pas comme prévu. Ce dont vous avez besoin c'est
grep "name=" file.txt | cut -d'=' -f1-
grep imprimera la ligne entière là où elle correspond au motif. Pour imprimer uniquement le motif correspondant, utilisez l'option grep -o. Vous devrez probablement également utiliser sed pour supprimer la partie name = du motif.
grep -o 'name=[0-9a-zA-Z ]' myfile | sed /^name=/d