Quelqu'un peut-il expliquer comment écrire une regex pour obtenir une valeur dans un très long fichier txt rempli de méta. Le fichier entier est sans aucun séparateur de nouveau-ligne, juste une très longue chaîne, qui est difficile à lire ou à analyser
J'ai besoin de valeurs de Grep après le nom d'utilisateur clé. Quelqu'un peut-il aider? Semble être bloqué écrire une extermination de regex appropriée pour cette affaire p> dans l'exemple ci-dessus, j'ai besoin de la sortie suivante p>
3 Réponses :
avec GNU AWK (j'ai ajouté l'impression du numéro de champ pour clarté ici avec l'impression Si vous voulez que le champ suivant ces champs: p> Vous pouvez utiliser gnu grep: p> ou perl Si vous voulez juste que le groupe de match: p> i code> devant
$ i code>):
Merci mais peut-être que je n'ai pas précisé correctement dans ma question initiale dont j'ai besoin pour les valeurs de Grep après le nom d'utilisateur et avant la compagnie. Alors ne peut être pas utilisateur mais quoi que ce soit. Fondamentalement, toute chaîne peut être présente
Veuillez mettre à jour votre question avec la sortie souhaitée.
Pour l'entrée LOKKING comme ceci:
< file \ tr ';' '\n' | sed 's/^.*:\\"\(.*\)\\"$/\1/' | grep -x "USER1\|USER2\|USER3_HERE"
; code> pour la nouvelle ligne li>
- filtre le texte entre le
: \ "... \" code> li>
- Grep uniquement pour User1 User2 ou User3_Here Strings Li>
ul> p>
avec perl, il est Imprimer la sortie capturée Chaque fois que vous voyez -n code> - ligne de fichier de processus par ligne, mais n'imprimez rien p>
-l code> - Coin de la ligne de poignée p>
-E code> - exécutez le code suivant p>
\ "nom d'utilisateur \"; code> suivi de quelque chose suivi de
\ " code>. p>
SORTIE H3>
$ perl -wn -le 'print for /\\"username\\";.*?\\"([^\\"]+)/g'
.."somevalue\";s:7:\"text1\";s:8:\"username\";s:9:\"USER1\";s:7:\"company\";s:3:\"text2\";s:5:\ "somevalue\";s:11:\"text11\";s:8:\"username\";s:15:\"USER2\";s:7:\"company\";s:17:\"XXXX\";s:5:\... "somevalue\";s:15:\"text110000\";s:8:\"username\";s:12:\"USER3_HERE\";s:7:\"company\";s:18:\"yyyyy\";s:
USER1
USER2
USER3_HERE
parfait! exactement ce que je cherche, et merci pour une explication très détaillée
Si
perl code> est une solution acceptable, utilisez
perl -wn -le 'imprimer pour /\"username\\\";.*?\\\\"([^\\\"]+) / g ' code>
Spécifiez le format du fichier. Qu'est-ce qui est derrière le
... code>? Toutes les pièces comprennent-elles en
S:: \ " \"; code>? alors
tr code> substitut
; code> pour newline,
grep code> pour la sortie et extraire les pièces de l'intérieur du
" code> à l'aide de
sed code> ou` couper`
Corion Merci, mais le code suggéré donnerait à S: 12: en sortie pour chaque valeur au lieu des noms d'utilisateurs Valeurs @Kamilcuk, il s'agit essentiellement d'un fichier .txt sans aucun nouveau nouveau caractères. Derrière ... Je veux dire qu'il existe d'autres clés différentes + des valeurs dans Meta, mais il suffit de sauvegarder toutes les valeurs des noms d'utilisateur et non rien d'autre. La scission serait probablement une solution probablement mais la tâche est de ne pas utiliser de fractionnement, ce qui m'a rendu coincé merci encore de l'aide.
J'ai mis à jour mon code dans l'intervalle. Si Perl est acceptable, je le posterai comme une réponse.
Cela ressemble au format
Serialize (CODE> SERIALIZEZ () CODE> PHP. Pourquoi ne pas utiliser php pour l'analyser au lieu de
grep code>?