我正在寻找一种使用变量来使用awk提取两个模式之间的线的方法。每个部分都在下一个部分开始的地方结束。
示例文件:
[ SECTION_1 ]
info 1
info 2
info 3
[ SECTION_2 ]
info 4
info 5
info 6
[ SOMETHING_SOMETHING_DARK_SIDE ]
...
[ WE_have_COokIES ]
和
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}"
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句