J'ai une liste d'adresses mémoire aléatoires enregistrées dans un fichier texte, et je dois sed
les extraire, les décoder et les sauvegarder dans mon fichier. Cependant, l'opération de décodage que j'essaie d'effectuer est gérée dans un programme C ++ que j'ai créé il y a quelque temps. Le problème que je rencontre maintenant est l'exécution du C ++ dans la sed
commande; c'est-à-dire que je veux référencer la partie qui doit être décodée et l'utiliser comme argument dans mon programme C ++. J'ai écrit la commande suivante:
cat $1 | sed -r 's/(0[Xx])([0-9A-Za-z]{1,8})/\1`./convAddrs \2`/g';
avant d'avoir eu la chance de lire une réponse dans ce post disant que sed
n'exécute PAS les commandes. Est-il vrai que sed
cela ne permet pas l'exécution de commandes? Si oui, en supposant que la commande que j'ai écrite est une sed
séquence valide , comment pourrais-je l'écrire perl
?
la source
Réponses:
perl -pe
: likesed
: traite l'entrée une ligne à la fois$_
, évalue l'expression xl perl [e] transmise à-e
chaque ligne et [p] imprime la modification$_
pour chacune.s|X|Y|gei
: substitueY
àX
in$_
([g] lobally, case [i] nsensitively, et traiteY
comme une expression perl [e] au lieu d'une chaîne de base).(?<=0x)
: regardez derrière0x
.[0-9a-f]{1,8}
: un à 8 chiffres hexadécimaux, autant que possible`./convAddrs $&`
: remplacez par la sortie de cette ligne de commande shell où$&
est remplacée par la partie correspondante.la source
/
ici car il est utilisé à l'intérieur de la pièce de rechange. Corrigée.Il peut ou non être vrai qui
sed
ne peut pas exécuter de commandes. Ce n'est pas vrai d'un GNUsed
:Je ne sais pas exactement quoi d'autre pourrait être dans votre
<$1
entrée, et donc je prends soin de#
commenter tout ce qui n'est pascommand \2
dans l'espace de motif. Lorsque vous utilisez l'e
indicateur xecute de GNU sur unes///
ubstitution, il passe l'intégralité de l'espace de motif résultant à$SHELL -c
son deuxième argument, puis remplace ensuite tout l'espace de motif par tout ce qui est écrit sur cette$SHELL
sortie standard. Donc, ci-dessus, j'imprime quels que soient vos résultats avant d'abord, puis après les résultats du passage de la ligne de commande au shell.la source