Разобрать все символы C++ в текстовом файле, используя SED, ECHO и C++FILT.

Рассмотрим входной файл с содержанием ниже:

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

Нужно найти искаженные символы во входном текстовом файле и заменить их их разобранными именами, и распечатать как выходные данные, как показано ниже:

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

Дано, что нет другой строки, которая будет иметь запятую с последующим подчеркиванием. Таким образом, я могу использовать ",(_.*)" Для захвата искаженного символа в файле input.txt.

Когда я использую приведенную ниже команду в оболочке tcsh, она не работает. Вывод все тот же, что и input.txt. Я не могу понять, почему.

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

Что не так с командой?

2 ответа

Я думаю, что это можно сделать с помощью Perl

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

запустите это в своей оболочке

      C++filt<input.txt>input_demangle.txt
Другие вопросы по тегам