Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用bash提取并替换字符串_Regex_Bash_Shell_Sed_Grep - Fatal编程技术网

Regex 用bash提取并替换字符串

Regex 用bash提取并替换字符串,regex,bash,shell,sed,grep,Regex,Bash,Shell,Sed,Grep,我有这样一个字符串:func showFetchNextSliceFailed(结果:UserResult){ 从这个,我想, 1) .extract justshowFetchNextSliceFailed 2) 。将其插入给定行的正上方,如#标记showFetchNextSliceFailed func showProductsList(result: UserResult<[Product]>) { } func showFetchNextSli

我有这样一个字符串:
func showFetchNextSliceFailed(结果:UserResult){

从这个,我想,

1) .extract just
showFetchNextSliceFailed

2) 。将其插入给定行的正上方,如
#标记showFetchNextSliceFailed

  func showProductsList(result: UserResult<[Product]>) {    
  }      
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {    
  }
func showProductsList(结果:UserResult){
}      
func showFetchNextSliceFailed(结果:UserResult){
}
预期输出:

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

  #Mark showFetchNextSliceFailed
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {    
  }
  $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]>) {

  }
#标记showProductsList
func showProductsList(结果:UserResult){
}
#标记showFetchNextSliceFailed
func showFetchNextSliceFailed(结果:UserResult){
}
我尝试了
grep
sed
,但仍然无法正确地提取和替换字符串。

Regex:
func\s(\w+)

替换为:
\Mark\1\n func\1

Regex:
func\s(\w+)

替换为:
\Mark\1\n func\1


如果您有以下
code
文件:

输入:

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

  #Mark showFetchNextSliceFailed
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {    
  }
  $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]>) {

  }
输出:

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

  #Mark showFetchNextSliceFailed
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {    
  }
  $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]>) {

  }
#标记showProductsList
func showProductsList(结果:UserResult){
}
#标记showFetchNextSliceFailed
func showFetchNextSliceFailed(结果:UserResult){
}
说明:

  • -i.bak
    就地模式,用于备份输入文件的
    perl
  • s/^(*124;\ t*)func\s(\w+)func\s(\w+)/\1#标记\2\n\1func\2/g
    查找和替换模式详细信息,请参见

如果您有以下
code
文件:

输入:

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

  #Mark showFetchNextSliceFailed
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {    
  }
  $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]>) {

  }
输出:

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

  #Mark showFetchNextSliceFailed
  func showFetchNextSliceFailed(result: UserResult<[Product]>) {    
  }
  $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]>) {

  }
#标记showProductsList
func showProductsList(结果:UserResult){
}
#标记showFetchNextSliceFailed
func showFetchNextSliceFailed(结果:UserResult){
}
说明:

  • -i.bak
    就地模式,用于备份输入文件的
    perl
  • s/^(*124;\ t*)func\s(\w+)func\s(\w+)/\1#标记\2\n\1func\2/g
    查找和替换模式详细信息,请参见

    • 遵循
      awk
      也可能对您有所帮助

      awk '/func/ && /showProductsList\(/{print "  #Mark showProductsList" ORS $0;next} /func/ && /showFetchNextSliceFailed\(/{print "  #Mark showFetchNextSliceFailed" ORS $0;next} 1'   Input_file
      
      现在也添加了一个非线性的解决方案

      awk '
      /func/ && /showProductsList\(/{
          print "  #Mark showProductsList" ORS $0;
          next}
      /func/ && /showFetchNextSliceFailed\(/{
          print "  #Mark showFetchNextSliceFailed" ORS $0;
          next}
      1
      '   Input_file
      

      如果您想将输出保存到输入文件中,那么您可以将
      >临时文件和&mv临时文件输入文件
      附加到上述代码中。

      以下
      awk
      也可能对您有所帮助

      awk '/func/ && /showProductsList\(/{print "  #Mark showProductsList" ORS $0;next} /func/ && /showFetchNextSliceFailed\(/{print "  #Mark showFetchNextSliceFailed" ORS $0;next} 1'   Input_file
      
      现在也添加了一个非线性的解决方案

      awk '
      /func/ && /showProductsList\(/{
          print "  #Mark showProductsList" ORS $0;
          next}
      /func/ && /showFetchNextSliceFailed\(/{
          print "  #Mark showFetchNextSliceFailed" ORS $0;
          next}
      1
      '   Input_file
      
      如果您想将输出保存到输入文件中,则可以将临时文件和mv临时文件输入文件附加到上述代码中。

      使用sed:

      $ sed 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
      
      如果要在文件中替换,请执行以下操作:

      $ sed -i 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
      
      使用sed:

      $ sed 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
      
      如果要在文件中替换,请执行以下操作:

      $ sed -i 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
      

      使用GNU awk匹配第三个参数()


      $awk'匹配($0,/\)第三个要匹配的参数的GNU awk()


      $awk'匹配($0,/\
      尝试使用grep和sed
      请添加尝试提问的内容。您现在应该知道,SO要求您在提问时显示(而不是告诉):)不要交叉发帖:我们回答了你的问题吗?请展示你的问题。我们这里的大多数人都很乐意帮助你改进你的技能,但不太乐意担任短期无薪编程人员。向我们展示你迄今为止的工作,你期望的结果和你得到的结果,我们将帮助你解决。这可能有助于重新设计ad.为什么要使用
      bash
      而不是更强大的字符串处理语言,如perl或python?
      尝试了grep和sed
      请添加问题的尝试。您现在应该知道,这要求您在提问时显示(而不是告诉):)不要交叉发帖:我们回答了你的问题吗?请展示你的问题。我们这里的大多数人都很乐意帮助你改进你的技能,但不太乐意担任短期无薪编程人员。向我们展示你迄今为止的工作,你期望的结果和你得到的结果,我们将帮助你解决。这可能有助于重新设计为什么要使用
      bash
      而不是更强大的字符串处理语言,比如perl或python?