如何使用grep提取子字符串?

时间:2012-09-24 16:34:16

标签: regex grep

  

可能重复:
  extract regexp result from string and write it to a variable

这是我的命令:

  

grep -E'\ * [[:space:]] + FIN [[:space:]] +([^]] +?)')myfile

输出:

  
      
  • FIN(SUCCESS)
  •   

我希望它只输出:

  

SUCCESS

我如何告诉grep这样做?

3 个答案:

答案 0 :(得分:7)

您可以将grep命令的输出传递给awk命令。

grep -E '*[[:space:]]+FIN[[:space:]]+([^)]+?)') myfile | awk '{print $2}'

我不确定如何单独使用grep,因为它并不是真正适合那个确切的用例。由于您位于grep所在的平台上,因此当您可以使用一个命令解决部分问题时使用管道,而另一个命令则使用另一个部分。

答案 1 :(得分:4)

grep无法输出单个捕获组,但您可以使用sed来执行此操作:

sed 's/\*[[:space:]]\+FIN[[:space:]]\+(\([^)]\+\))/\1/g' file

答案 2 :(得分:3)

如果您使用ack,则可以使用匹配组和--output开关:

ack '\*\s+FIN\((.+?)\)' --output='$1' myfile