-1
votes

Comment extraire des parenthèses imbriquées dans SED?

J'essaie d'extraire des colonnes séparées avec espaces blanche avec sed . Voici un exemple avec PS : xxx

pourquoi ça fait de cette façon? Comment spécifier des parenthèses imbriquées?


Je voudrais obtenir une colonne de PIDS (dans cet exemple).


J'ai trouvé que je ne peux pas traiter non parenthèses imbriquées soit: xxx

dans le dernier cas, il imprime la ligne avec C et 2 lignes VIDEY.

pourquoi ???


13 commentaires

Je ne pense pas que vous puissiez utiliser un groupe de capture de \ 0 . Et utiliser [[[: espace:]]] au lieu de \ s ? 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 PS est en cours de traitement par SED . Ne nous faisons pas deviner si une partie du sed 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 seul est la même que dans ma première impression (à l'exception de l'ajout de sed 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 ? Ou si vous préférez SED, que diriez-vous de SED 'S / \ ([^] \). * / \ 1 /' ?


@Beta je préfère sed . 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


Si vous voulez juste que les PIDS, pourquoi pas seulement faire PS -O PID ?


Et si vous souhaitez une colonne arbitraire des colonnes séparées de WhitSpace, utilisez awk: awk '{imprimer $ n}' n = $ colonne


@Cyrus Et si Regex est plus complexe? Et si je veux scinder par @ et par : , alors quoi? Est sed inutilisable?


@Williampursell Je ne veux pas de pids, je veux comprendre sed .


Si vous souhaitez scinder par @ et : , utilisez awk '{imprimer $ 2}' fs = '[@:]' .


3 Réponses :


0
votes

Supposons que le fichier brut soit xxx

(s'il y a des espaces de tête, retirez-le dans une opération distincte, 's / ^ * //' ) < / p>

sans expressions régulières étendues, vous pouvez le faire: xxx

qui donnera xxx

étendu Expressions régulières pourrait 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.


0 commentaires

0
votes

Premièrement, veuillez éviter les citations doubles à moins que vous souhaitiez que la coquille l'interpréte (voir https: //mywiki.woolgedge .org / citations )

awk est mieux adapté au traitement sur le terrain, mais je vais essayer de fournir une solution sed avec des explications (en supposant que Gnu sed comme \ s est utilisé) xxx


0 commentaires

0
votes

Ceci pourrait fonctionner pour vous (GNU SED):

sed -nE 's/^(\s*(\S+)){4}.*/\2/p' file


0 commentaires