提取字符串并用 bash 替换

提取字符串并用 bash 替换

我有一个像这样的字符串: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,但仍然无法正确弄清楚如何提取和替换字符串。

答案1

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]>) {

  }

答案2

如果您有以下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.bakperl用于备份输入文件的就地模式
  • s/^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g查找和替换模式详细信息位于演示

相关内容