【发布时间】:2021-09-29 03:21:22
【问题描述】:
当某种情况发生时,我试图排除文本块。
文件具有以下布局:
- name: Sedan
tags:
- DIGIT
- ABC
- DEF
- YES
- name: Combi
tags:
- DIGIT
- ABC
- DEF
- NO
- nane: SUV
tags:
- DIGIT
- DEF
- YES
- nane: OTHER
tags:
- DIGIT
- ABC
- YES
条件为:ABC && !DEF
所以,只打印块中只有ABC 的文本块。
它应该给我这个打印输出:
- nane: OTHER
tags:
- DIGIT
- ABC
- YES
我的第一次尝试是这样的:
awk '/^- name:/ { if (found && value) {print value} found=value="" } { value=(value?value ORS:"")$0 } /ABC/ && !/DEF/ { found=1 } END { if (found && value) { print value } }' file
但上面的尝试会打印带有两种模式的每个文本块!
以下两种解决方案都有效,这就是我使用它对多个文件执行此操作的方式:
for i in `find /home/ -mindepth 1 -type f ! -empty`; do ln=`awk -v RS='(^|\n)- ' '/- ABC(\n|$)/ && !/- DEF(\n|$)/ {printf "- %s\n", $0}' $i; printf $i`; echo -e $ln"\n" | sed -n -e 's/^.*file: //p' | grep txt ; done
谢谢
【问题讨论】: