Bash

用 bash 提取和替換字元串

  • May 17, 2018

我有一個像這樣的字元串:func showFetchNextSliceFailed(result: UserResult<[Product]>) {

由此,我想1)。僅提取showFetchNextSliceFailed2)。將其插入給定行的正上方,如#Mark showFetchNextSliceFailed.

 func showProductsList(result: UserResult<[Product]>) {

 }

 func showFetchNextSliceFailed(result: UserResult<[Product]>) {

 }

預期輸出:

 #Mark showProductsList
 func showProductsList(result: UserResult<[Product]>) {

 }

 #Mark showFetchNextSliceFailed
 func showFetchNextSliceFailed(result: UserResult<[Product]>) {

 }

我嘗試使用 grep 和 sed,但仍然無法正確弄清楚如何提取和替換字元串。

sed

  • 複製匹配的模式空間以保留空間
  • 修改模式空間
  • 從保持空間中恢復原件並附加它

前任。

$ sed '/func show/ {h; s/func \(show[^(]*\).*/#Mark \1/; G;}' file
 #Mark showProductsList
 func showProductsList(result: UserResult<[Product]>) {

 }

 #Mark showFetchNextSliceFailed
 func showFetchNextSliceFailed(result: UserResult<[Product]>) {

 }

如果您有以下code文件:

輸入:

 $more code
 func showProductsList(result: UserResult<[Product]>) {

 }

 func showFetchNextSliceFailed(result: UserResult<[Product]>) {

 }

命令:

perl -i.bak -pe "s/^^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g" code

輸出:

 #Mark showProductsList
 func showProductsList(result: UserResult<[Product]>) {

 }

 #Mark showFetchNextSliceFailed
 func showFetchNextSliceFailed(result: UserResult<[Product]>) {

 }

說明:

  • -i.bak``perl用於備份輸入文件的就地模式
  • s/^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g展示中詳細介紹的查找和替換模式

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