-1

可能重复:
awk 脚本 - 提取括号之间的文本

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

abc(

xyz,
abc,
mnr,
puc,

)

我尝试使用 awk,例如:

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

但这不起作用。

请在这方面帮助我

提前致谢

4

2 回答 2

3

您可以sed像这样使用“提取文本”:

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

结果:

xyz,
abc,
mnr,
puc,

解释:

  • -n使用开关禁用默认打印
  • 使用范围运算符在两个模式之间“选择”一个模式,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,
于 2012-12-26T08:30:56.030 回答
1

方式1:

如果abc(前后总是有空行)

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

方式2:

如果您不确定空行:

awk '/abc\($/{f=1;next;} /^ *\) *$/{f=0}f' file

请注意,在方式 2 中,某些情况下不起作用。例如,)您的 abc(...) 块中有嵌套的 " " 行。但你可以测试它。根据您问题中的给定输入。两者都有效。

于 2012-12-26T12:09:38.737 回答