在“sed”中执行命令

Fad*_*ass 9 sed perl regular-expression

我有一个保存在文本文件中的随机内存地址列表,我需要将sed它们取出,解码它们,然后将它们保存回我的文件。但是,我尝试执行的解码操作是在我前段时间创建的 C++ 程序中处理的。我现在遇到的问题是在sed命令中执行 C++ ;也就是说,我想反向引用需要解码的部分并将其用作我的 C++ 程序中的参数。我写了以下命令:

cat $1 | sed -r 's/(0[Xx])([0-9A-Za-z]{1,8})/\1`./convAddrs \2`/g';
Run Code Online (Sandbox Code Playgroud)

在我有机会阅读这篇文章中的答案之前,说不sed执行命令。是真的sed不允许执行命令吗?如果是这样,假设我写的命令是一个有效的sed序列,我将如何写perl

Sté*_*las 8

perl -pe 's|(?<=0x)[0-9a-f]{1,8}|`./convAddrs $&`|gei'
Run Code Online (Sandbox Code Playgroud)
  • perl -pe: like sed: 一次处理输入一行$_,评估传递给-e每一行的 perl [e]xpression并 [p]rint 修改后$_的每一行。
  • s|X|Y|gei:替代YX$_([G] lobally,壳体[I] nsensitively,和治疗Y作为一个perl [E] XPRESSION代替基本的字符串)。
  • (?<=0x): 后面找0x
  • [0-9a-f]{1,8}: 1 到 8 个十六进制数字,尽可能多
  • `./convAddrs $&`:替换为该 shell 命令行的输出,其中$&替换为匹配的部分。