Comment puis-je créer une ligne contenant des caractères spéciaux?
comme par exemple j’ai un fichier contenant ce texte
ISA^G00^G ^G00^G ^G12^G14147844480 ^GZZ^G001165208 ^G160601^G1903^GU^G00401^G600038486^G0^GP^G>~GS^GTX^G14147844480^G001165208^G20160601^G1903^G600038486^GX^G004010VICS~ST^G864^G384860001~BMG^G00^G^G04~MIT^G000000591^GKohl's AS2 Certificate Change June 21, 2016~N1^GFR^GKOHL'S DEPARTMENT STORES~PER^GIC^[email protected]^GTE^G262-703-7334~MSG^GAttention Kohl's AS2 trading partners, Kohl's will be changing.
Je voudrais grep la ligne sous le segment MSG
en utilisant cette commande:
grep-oP ‘MSG. \ K [\ w \ s \ d] *’ <nomfichier
Résultat attendu :
Les partenaires commerciaux AS2 de Kohl, Kohl, vont changer.
Résultat actuel:
Attention Kohl
Comment vais-je le faire?
Votre modèle:
grep -Po 'MSG.\K[\w\s\d]*'
correspond simplement à Attention Kohl
parce que vous avez une seule citation après celle qui ne correspondra à aucun des jetons \w
, \s
, \d
.
Vous avez aussi et .
dans la partie désirée, vous devez donc également les assortir. De plus, \d
est en fait un sous-ensemble de \w
donc pas besoin d’explicite \d
.
Donc, vous pouvez faire:
grep -Po 'MSG.\K[\w\s,.'\'']*'
Ou si vous voulez juste correspondre jusqu’à la fin:
grep -Po 'MSG.\K.*'
Voulez-vous simplement tout grep après MSG? Ce serait plus simple avec d’autres méthodes. Aussi, je vois qu’il y a plusieurs caractères ^G
dans votre fichier, adjacents au mot MSG également. Vous ne savez pas si vous voulez exclure ceux qui sont en train de grimper.
Retour à votre regex donnée – vous pouvez append \W
qui correspondra à un caractère non-mot et vous donner le résultat souhaité.
grep -oP 'MSG.\K[\w\s\d\W]*' filename
Pas besoin d’utiliser <
operator pour grep
ici.