我正在寻找一种方法来使用 awk 提取两个模式之间的行
变量。每个部分结束于下一个部分的开始处。
示例文件:
[ SECTION_1 ]
info 1
info 2
info 3
[ SECTION_2 ]
info 4
info 5
info 6
[ SOMETHING_SOMETHING_DARK_SIDE ]
...
[ WE_have_COokIES ]
with
awk '/^\[ SECTION_1 \]/{p=1;next} /^\[ [!-~]+ \]/{p=0} p' "${MY_FILE_PATH}"
我得到了我想要的:
info 1
info 2
info 3
但我想要这样的东西:
function get {
awk '/^\[ "$1" \]/{p=1;next} /^\[ [!-~]+ \]/{p=0} p' "${MY_FILE_PATH}"
}
似乎没有任何作用:( 有什么想法或提示吗?
你用双引号引用错了。位置参数$1
未展开,因为它仍用单引号引起来。它应该是:
function get {
awk '/^\[ '"$1"' \]/{p=1;next} /^\[ [!-~]+ \]/{p=0} f' "${MY_FILE_PATH}"
}
也许另一个好方法是使用-v
。至少可以避免严重的语法错误:
function get {
awk -v s="$1" '$0 ~ "^\\[ " s " \\]"{p=1;next} /^\[ [!-~]+ \]/{p=0} f' "${MY_FILE_PATH}"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)