Text-Processing

用第一個匹配組替換所有出現的模式

  • November 20, 2018

我必須從這個出發:

text match$something_here and match$xxx blablabla
text match$something_else_here and match$xxx blablabla
...

對此:

text match$something_here and match$something_here blablabla
text match$something_else_here and match$something_else_here blablabla
...

因此,對於文件中的每一行,我需要更改xxx第 2 次出現match$之後的match$.

:%s/match\$\zs\(\w\+\)\(.*match\$\)xxx/\1\2\1/

解釋

  • match\$\zs:將比賽錨定在第一場match$;在那之後我\zs開始比賽,以避免另一個擷取組
  • \(\w\+\): 在第一次出現後擷取文本match$
  • \(.*match\$\): 擷取之後的內容,直到第二次出現match$,並擷取我們想要保留的內容
  • xxx: 匹配被替換的內容

替換:第一次出現之後的文本,然後是中間的文本,然後是第一個文本(替換xxx)。

引用自:https://unix.stackexchange.com/questions/183426