首页 > 解决方案 > 使用 SED、ECHO 和 C++FILT 去除 txt 文件中的所有 c++ 符号

问题描述

考虑一个具有以下内容的输入文件:

RANDOM CONTENTS1
FN:4,_Z1fv
FN:5,_Z1gv
RANDOM CONTENTS2

需要在输入 txt 文件中搜索损坏的符号并将其替换为它们的去错名称,并将其打印为输出,如下所示:

RANDOM CONTENTS1
FN:4,f()
FN:5,g()
RANDOM CONTENTS2

假设没有其他行将有逗号后跟下划线。因此,我可以使用 ",(_.*)" 来捕获 input.txt 文件中的损坏符号。

当我在 tcsh shell 中使用以下命令时,它不起作用。输出仍然与 input.txt 相同。我无法解释为什么。

sed "s#,\(_.*\)#,`echo \\1 | /usr/bin/c++filt`#" input.txt

命令有什么问题?

标签: unixsedechodemanglerc++filt

解决方案


我认为使用 perl 可以更轻松地完成

perl -i.bak -pe 'chomp($_ = qx{echo \"$_\" | /usr/bin/c++filt}) if /,_/' input.txt

推荐阅读