可能重复:
awk 脚本 - 提取括号之间的文本
我正在尝试在 unix 中提取文件的两个括号之间的文本。喜欢关注
abc(
xyz,
abc,
mnr,
puc,
)
我尝试使用 awk,例如:
awk 'BEGIN {FS="abc"} {print $2}' file.txt
但这不起作用。
请在这方面帮助我
提前致谢
可能重复:
awk 脚本 - 提取括号之间的文本
我正在尝试在 unix 中提取文件的两个括号之间的文本。喜欢关注
abc(
xyz,
abc,
mnr,
puc,
)
我尝试使用 awk,例如:
awk 'BEGIN {FS="abc"} {print $2}' file.txt
但这不起作用。
请在这方面帮助我
提前致谢
您可以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,
方式1:
如果abc(
前后总是有空行)
:
awk -vRS="" '/abc\($/{f=1;next};/\)/{f=0}f' file
方式2:
如果您不确定空行:
awk '/abc\($/{f=1;next;} /^ *\) *$/{f=0}f' file
请注意,在方式 2 中,某些情况下不起作用。例如,)
您的 abc(...) 块中有嵌套的 " " 行。但你可以测试它。根据您问题中的给定输入。两者都有效。