Regex 在Perl中替换之前排除包含模式的行

Regex 在Perl中替换之前排除包含模式的行,regex,perl,ack,Regex,Perl,Ack,我有以下代码来替换一组文件中的版本字符串 ack --ignore-file=is:HISTORY.md -l --print0 '1\.1\.1' | xargs -0 perl -pi -e 's/1\.1\.1/1\.1\.2/g' 现在,我意识到在doxygen注释中有一些行也有这样的版本字符串 /** * Generate Tag id from Tag name * * @since 1.1.1 * @static * @access public * */ 如何

我有以下代码来替换一组文件中的版本字符串

ack --ignore-file=is:HISTORY.md -l --print0 '1\.1\.1' | xargs -0 perl -pi -e 's/1\.1\.1/1\.1\.2/g' 
现在,我意识到在doxygen注释中有一些行也有这样的版本字符串

/**
 * Generate Tag id from Tag name
 *
 * @since 1.1.1
 * @static
 * @access public
 *
 */
如何修改上述代码段,以便排除包含@since的行?

要排除带有@since的行,可以尝试使用此代码而不是当前的perl替换代码:

!/\@since/ && s/1\.1\.1/1.1.2/g
甚至

/\@since/ || s/1\.1\.1/1.1.2/g
要排除带有@的行,因为您可以尝试此操作而不是当前的perl替换代码:

!/\@since/ && s/1\.1\.1/1.1.2/g
甚至

/\@since/ || s/1\.1\.1/1.1.2/g

我确实希望\2是一个输入错误,否则它就是代码中的一个无声错误\2是对捕获组的反向引用,您没有使用它,因此\2被插入到空字符串中,因为您没有使用警告,所以没有得到任何关于它的警告。@TLP Yes是一个输入错误。我刚修好。谢谢。包含1.1.1的行是版本行吗?@sin是的。在本例中,1.1.1是当前版本号,我希望\2是一个输入错误,否则它是代码中的一个无声错误\2是对捕获组的反向引用,您没有使用它,因此\2被插入到空字符串中,因为您没有使用警告,所以没有得到任何关于它的警告。@TLP Yes是一个输入错误。我刚修好。谢谢。包含1.1.1的行是版本行吗?@sin是的。在这种情况下,1.1.1是当前的版本号,这是有效的。顺便说一句,我们不是要逃跑吗。在替换字符串中?@Sudar-不,它们不匹配。@Sudar,regex模式元字符在替换中无效,因此不需要转义。谢谢您的帮助。顺便说一句,我们不是要逃跑吗。在替换字符串中?@Sudar-不,它们不匹配。@Sudar,regex模式元字符在替换中无效,因此不需要转义。