我有线
* {@jira: PIVOT-9968} Provide a way to pass an `IMemoryCollector` to `IInternalMemoryMonitored#getMemoryStatistics(memoryCollector)` in order to prevent the count of duplicated blocks.
我只想转义第一个包含票号的字符。 编写脚本以添加反斜杠来 解决我之前的问题
* /{@jira: PIVOT-9968/} Provide a way to pass an `IMemoryCollector` to `IInternalMemoryMonitored#getMemoryStatistics(memoryCollector)` in order to prevent the count of duplicated blocks.
我试过
mawk '/^\* {@jira: PIVOT/ { gsub(/[{} ]/,"\\\\&") } 1' changelog.md > tmp && mv tmp changelog.md
并得到
*\ \{@jira:\ PIVOT-8019\}\ Pivot:\ Added\ `MaxAppendOnlyFunction`\ and\ \ `MinAppendOnlyFunction`\ aggregation\ functions\ that\ do\ not\ support\ disaggregation\ but\ can\ be\ used\ within\ an\ aggregate\ provider.
我应该改变什么?gsub?
在
awk
sub()
将替换第一次出现的匹配项gsub()
将替换所有匹配项/[{} ]/
表示匹配 3 个字符中的任意 1 个:{
,}
和如果我们删除空格(剩下
/{}/
):假设 OP 想要使用反斜杠作为转义字符,并且行上只有一对括号,这足以满足 OP 的要求。
如果一行中可以出现多对括号……
针对此文件运行新代码将会错误地修改所有括号对:
为了将替换限制为仅第一对括号,我们可以使用一对
sub()
调用,其中每个调用替换单个字符的第一次出现;请注意,我们用/[{}]/
和替换/{/
,/}/
并且因为我们知道我们将匹配的字符,所以我们可以\\&
用实际字符替换(为了在代码中稍微简化):使用以下方法实现最后一次逐个替换
sed
:在哪里:
/1
表示替换第一次出现的情况awk / sub()
,我们需要运行两次单独的替换来匹配第一对括号