J'essaie d'extraire des colonnes séparées avec espaces blanche avec pourquoi ça fait de cette façon? Comment spécifier des parenthèses imbriquées? P> Je voudrais obtenir une colonne de PIDS (dans cet exemple). P> J'ai trouvé que je ne peux pas traiter non parenthèses imbriquées soit: p> dans le dernier cas, il imprime la ligne avec pourquoi ??? p> p> sed code>. Voici un exemple avec
PS code>:
C code> et 2 lignes VIDEY. P>
3 Réponses :
Supposons que le fichier brut soit (s'il y a des espaces de tête, retirez-le dans une opération distincte, sans expressions régulières étendues, vous pouvez le faire: p> qui donnera p> étendu Expressions régulières pourrait em> faire cela un peu plus propre, mais toutes les implémentations ne prennent pas en charge les backresférences, la logique serait donc un peu plus compliquée. p> p> 's / ^ * //' code>) < / p>
Premièrement, veuillez éviter les citations doubles à moins que vous souhaitiez que la coquille l'interpréte (voir https: //mywiki.woolgedge .org / citations )
Pour obtenir une colonne spécifique, j'utiliserais: p> qui nous donne la formule générique suivante: p> awk code> est mieux adapté au traitement sur le terrain, mais je vais essayer de fournir une solution
sed code> avec des explications (en supposant que
Gnu sed code> comme
\ s code> est utilisé) p>
^ code> ancrage de départ li>
[^ \ s] code> Cela ne fonctionnera pas comme vous le souhaitez, il correspondra autrement que
\ code> et
s code>.
\ s code>,
\ s code>,
\ w code> et
\ w code> ne sont pas reconnus par
SED code > Les classes de caractères intérieures, dans ce cas, vous pouvez simplement utiliser
\ s code> si li>
(\ s * ([^ \ s] +)) code> Vous avez probablement l'intention de capturer uniquement la valeur de champ en utilisant deux groupes de capture li>
{4} code> Toutefois, lorsque le quantificateur est utilisé, seul le dernier match sera disponible pour la fréquence arrière, d'autres correspondances sont remplacées. (Lecture ultérieure: https://www.regular-expressions.info/capTureAll.htmlled/a >) li>
\ s * code> chaîne comme
cmd code> correspondant comme plusieurs champs dans la case ci-dessus LI>
-n code> et
p code> au lieu de les laisser sortir li>
ul>
Ceci pourrait fonctionner pour vous (GNU SED):
sed -nE 's/^(\s*(\S+)){4}.*/\2/p' file
Je ne pense pas que vous puissiez utiliser un groupe de capture de
\ 0 code>. Et utiliser
[[[: espace:]]] code> au lieu de
\ s code>? Modifiez également votre Q pour afficher votre sortie requise à partir de cette entrée. Bonne chance.
@Cyrus Quel est le problème avec ce qui est affiché?
D'accord avec Cyrus. Votre sortie code> PS code> est en cours de traitement par
SED code>. Ne nous faisons pas deviner si une partie du
sed code> fonctionne, s'il vous plaît. Et s'il vous plaît montrer la sortie requise. Bonne chance.
@shellter Je vous assure que la sortie de
ps code> seul est la même que dans ma première impression (à l'exception de l'ajout de
sed code> processus lui-même). Vous pouvez l'essayer sur votre propre ordinateur si vous ne me croyez pas.
Vous voulez la première colonne? Êtes-vous familiarisé avec
couper code>? Ou si vous préférez SED, que diriez-vous de
SED 'S / \ ([^] \). * / \ 1 /' code>?
@Beta je préfère
sed code>. Je veux pouvoir extraire n'importe quel numéro de colonne, d'abord est juste un exemple. Si je fournis un exemple, je suis répondu avec des recettes spécifiques pour cet exemple. Si je ne fournissons pas d'exemple, je suis invité à le fournir. Est-il possible de demander des astuces générales ici?
Le problème était que votre description était vague et ambiguë. Mais je pense que je l'ai maintenant.
Avec awk:
awk '{imprimer $ 1}' out.txt code>
Si vous voulez juste que les PIDS, pourquoi pas seulement faire
PS -O PID code>?
Et si vous souhaitez une colonne arbitraire des colonnes séparées de WhitSpace, utilisez awk:
awk '{imprimer $ n}' n = $ colonne code>
@Cyrus Et si Regex est plus complexe? Et si je veux scinder par
@ code> et par
: code>, alors quoi? Est
sed code> inutilisable?
@Williampursell Je ne veux pas de pids, je veux comprendre
sed code>.
Si vous souhaitez scinder par
@ code> et
: code>, utilisez
awk '{imprimer $ 2}' fs = '[@:]' code>.