我需要缩短函数名称,因此我识别它们并生成一个非常长的 sed 脚本,如下所示:
s/\breally_long_function_name1\b/A00128/g
s/\breally_long_function_name2\b/A00060/g
s/\breally_long_function_name3\b/A00035/g
s/\breally_long_function_name4\b/A00342/g
s/\breally_long_function_name5\b/A00203/g
...
Run Code Online (Sandbox Code Playgroud)
然后这样称呼它:
`sed -i.bak -f $sedscript *`
Run Code Online (Sandbox Code Playgroud)
问题是我不能依赖sed能够处理这些实例\b,而且看起来很混乱。我不想写出 sed 脚本,而是想将其放入一个数组中,然后对需要处理的每个文件的每一行执行类似的操作:
$targetline =~ $processing;
Run Code Online (Sandbox Code Playgroud)
我的问题是,这样使用$processing是行不通的,而且q操作员似乎也没有完成这项工作。我如何处理它以处理替换$processing并输入结果$targetline?
注意:我在脚本中使用了 Perl sed 文件以及@ron-bergin 的答案来达到这一点。
其应用是将现代 C 代码转换为可以由古代 C 编译器编译的形式。现有脚本位于https://gitlab.com/DavidGriffith/frotz/-/blob/master/src/misc/snavig.pl,用于准备供 KCC(PDP-10 的早期 C 编译器)编译的源代码大型机。它的怪癖之一是某些符号的长度限制为 6 个字符。有关此内容的背景位于https://github.com/PDP-10/panda/blob/master/files/kcc-6/kcc/user.doc#L519。
这是处理前源文件的片段:
void reset_memory(void)
{
        if (story_fp != NULL)
                fclose(story_fp);
        story_fp = NULL;
        if (undo_diff) {
                free_undo(undo_count);
                zfree(undo_diff);
                zfree(prev_zmp);
        }
        undo_diff = NULL;
        undo_count = …Run Code Online (Sandbox Code Playgroud)