Linux 如何删除文件外壳脚本中的文本块?

Linux 如何删除文件外壳脚本中的文本块?,linux,sh,Linux,Sh,我有下面的场景,我有一个文本块和示例 basketball: ball: round 因为我不知道篮球里面到底是什么:但我喜欢删除里面的所有东西例如: men: height: 170 athlete: basketball women: height:180 athlete: basketball 我只想删除men块,忽略此键上方或下方的任何内容。下面的AWK脚本将删除包含篮球的所有men部分。这就是你的意思吗?使用awk-f filter.awk input.txt运行

我有下面的场景,我有一个文本块和示例

basketball:
 ball: round
因为我不知道篮球里面到底是什么:但我喜欢删除里面的所有东西例如:

men:
  height: 170
  athlete: basketball
women:
  height:180
  athlete: basketball

我只想删除men块,忽略此键上方或下方的任何内容。下面的AWK脚本将删除包含篮球的所有men部分。这就是你的意思吗?使用
awk-f filter.awk input.txt运行

/^[A-Za-z0-9]/ {
    if (sectionWanted) {
        printf "%s", section
    }
    sectionWanted = 1
    section = ""
    sectionName = $1
}

/basketball/ && sectionName == "men:" {
    sectionWanted = 0
}

{
    section = section $0 "\n"
}

END {
    if (sectionWanted) {
        printf "%s", section
    }
}

如果这实际上是一种类似YAML的结构化格式,那么可能使用一种能够解析该结构的语言。你是说所有这些行都在同一个文件中吗?或者这是两组示例数据?如果是一个文件,请合并行以显示实际文件内容,以消除歧义。如果它是两个文件,并且您想要删除
men:
块,那么您可以简单地使用
awk'NF==1&&$1==“men:{n=1;next};NF==1{n=0}n==0'
file`