Linux Vim搜索和回复
我想从name_jokl_nbfg搜索到.Q(Q_name)。在匹配模式中,我希望将.Q(Q_名称)替换为.Q(Q_名称),其他所有内容都应保持不变Linux Vim搜索和回复,linux,vim,Linux,Vim,我想从name_jokl_nbfg搜索到.Q(Q_name)。在匹配模式中,我希望将.Q(Q_名称)替换为.Q(Q_名称),其他所有内容都应保持不变 ANDLVT name_jokl_nbfg( .D(NET_1), .S(SE_NAME), .Q(Q_NAME), .SN(SN_NAME)); 编辑: name_jokl_nbfg是不同的长实例名称中的常见字符串。在仅包含NAME_jokl_nbfg的实例中,我想将Q_N
ANDLVT name_jokl_nbfg( .D(NET_1),
.S(SE_NAME),
.Q(Q_NAME),
.SN(SN_NAME));
编辑:
name_jokl_nbfg是不同的长实例名称中的常见字符串。在仅包含NAME_jokl_nbfg的实例中,我想将Q_NAME替换为Q_NAME_NAME。Q_名称也出现在许多其他实例中。.Q(Q_名称)不需要仅出现在第三行中。它也可以出现在第二行或第四行。您可以直观地选择要搜索/替换的范围,然后键入
:
然后,Vim将添加
”这将仅当Q_NAME出现在NAME_jokl_nbfg块中时,才将Q_NAME替换为Q_NAME。逻辑是描述整个多行块,同时将部分保存到记忆的组中,并将它们与新文本一起放回原位
:%s/^\(.* name_jokl_nbfg\_.\{-}\.Q(\)\(Q_NAME\)\(\_.\{-}));\)/\1Q_NAME_NAME\3/g
解释:
:%s/ In command mode, search on every line for
^ Anchor to start of line
\( Start first group
.* any number of any characters
<sp>name_jokl_nbfg Literal string followed by
\_. Any character including a newline
\{-} Non-greedy version of '*' so any number of any characters including newline until...
\.Q( Literal string
\) End first group
\(Q_NAME\) Second group is the literal string you want to replace
\( Start of group 3
\_.\{-} any number of any characters non-greedy until...
)); literal string representing the end of the block
\) End of group 3
/ Replace all that with
\1 remembered group 1
Q_NAME_NAME Literal string
\3 remembered group 3
/g do that globally (omit the g if you only need to replace the first occurrence)
:%s/在命令模式下,每行搜索
^起锚
\(开始第一组
*任意数量的任意字符
name_jokl_nbfg文本字符串后跟
\_.任何字符,包括换行符
\{-}非贪婪版本的“*”,所以任何数量的字符,包括换行符,直到。。。
\.Q(文本字符串)
\)第一组结束
\(Q_NAME\)第二个组是要替换的文本字符串
\(第3组开始)
\_.\{-}任意数量的非贪婪字符,直到。。。
)); 表示块结尾的文本字符串
\)第3组结束
/换成
\第一组
Q_NAME_NAME文字字符串
\第三组
/g全局执行该操作(如果只需要替换第一个匹配项,则省略g)
:%s/.Q(Q\u NAME)/.Q(Q\u NAME\u NAME)我不清楚你为什么强调。。。直到…
?是否仅重新连接名为name\u jokl\u nbfg
的单元格的Q
pin?很可能不是OP想要的,但这没有错。我不理解否决票。我想从name.*.Q(Q_name)开始匹配,并用name.*.Q(Q_name_name)替换所有内容。Q(Q_name_name),我需要从name开始匹配,因为它会随着实例的变化而变化。@pradeep,你能添加一个before和after的示例,让你的问题更清楚。@pradeep-最好添加几个示例。Q_NAME
是否总是低两行?它是否可以与name\u jokl\u nbfg
在同一行?为什么不只搜索Q(Q_NAME)
?
:%s/ In command mode, search on every line for
^ Anchor to start of line
\( Start first group
.* any number of any characters
<sp>name_jokl_nbfg Literal string followed by
\_. Any character including a newline
\{-} Non-greedy version of '*' so any number of any characters including newline until...
\.Q( Literal string
\) End first group
\(Q_NAME\) Second group is the literal string you want to replace
\( Start of group 3
\_.\{-} any number of any characters non-greedy until...
)); literal string representing the end of the block
\) End of group 3
/ Replace all that with
\1 remembered group 1
Q_NAME_NAME Literal string
\3 remembered group 3
/g do that globally (omit the g if you only need to replace the first occurrence)