在我的源代码中,它具有以下示例:
menu = add_menu_item ((char **)HW_KIND, 21);
.
.
if(get_idx_by_str ((char **)HW_KIND, prev->column_section, 21, 0) < get_idx_by_str ((char **)HW_KIND, curr->column_section, 21, 0))
.
.
fprintf(fp, "# %d floor\n%d@%d\n\n", i, get_idx_by_str ((char **)HW_KIND, section->column_section, 21, 0), stop->stop_landing);
.
.
add_text_to_gtk_text_buffer (text_buffer, iter, NULL, -99, -99, "??????????Ե -- %s\n", HW_KIND[steel_col_data.sec_idx]);
我想找到所有句子都具有正确键HW_KIND
然后21
,然后将21
更改为20
。例如,上面的前三个句子与搜索条件匹配,但上面的最后一个句子不匹配。
如果在Linux的终端中,grep "\<HW_KIND\>" foo.c | grep 21
将查找所有出现的内容。如何在 Vi 编辑器中定义替换命令?
谢谢。
答案 0 :(得分:0)
你必须同时搜索HW_KIND和21,同时保留它们之间的所有内容。为此,您可以在搜索文本中使用大括号\(
和\)
定义一个组,然后将该组替换为\1
。
:%s/\(HW_KIND.*\)21/\120/
也可以使用sed
在命令行上进行此类替换。
答案 1 :(得分:0)
您可以使用以下正则表达式:
:%s/\(.\{-}HW_KIND.\{-}\)21\(.\{-}\)/\120\2/gc
使用c
选项,您可以确认每次更换。
试试上面的正则表达式并观察它取代你想要的文本。
它将取代4场比赛。
\(
和\)
用于捕获群组,\{-}
用于非贪婪匹配。