从unix中的文件中提取两个括号之间的文本

时间:2012-12-26 07:52:27

标签: shell unix

  

可能重复:
  awk script- extract text between parenthesis

我试图在unix中的文件的两个括号之间提取文本。喜欢关注

abc(

xyz,
abc,
mnr,
puc,

)

我尝试使用awk,如:

awk 'BEGIN {FS="abc"} {print $2}' file.txt

但这不起作用。

请在这方面帮助我

提前致谢

2 个答案:

答案 0 :(得分:3)

您可以使用sed来“提取文字”,如下所示:

sed -n '/abc(/,/)/ { //d; /^\s*$/!p }' file

结果:

xyz,
abc,
mnr,
puc,

说明:

  • 使用-n开关
  • 禁用默认打印
  • 使用range operator“选择”两种模式之间的模式abc()
  • //d删除所选模式:abc()
  • 并且/^\s*$/!p告诉sed打印除空行之外的任何内容。

awk

awk '/abc\(/ { r=""; f=1 } f && !/^(abc\(|\)|\s*)$/ { r = (r ? r ORS : "") $0 } /\)/ { if (f) print r; f=0 }' file

结果:

xyz,
abc,
mnr,
puc,

答案 1 :(得分:0)

方式1:

如果abc(之后和)之前总是空行:

awk -vRS="" '/abc\($/{f=1;next};/\)/{f=0}f' file

方式2:

如果你不确定空行:

awk '/abc\($/{f=1;next;} /^ *\) *$/{f=0}f' file
注意,在方式2中,某些情况不起作用。例如,你的abc(...)块中有嵌套的“)”行。但你可以测试一下。基于您问题中的给定输入。两者都有效。