Разобрать все символы 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