是否有一种简单的awk/sed方法可以在YAML文件中打印列表?

是否有一种简单的awk/sed方法可以在YAML文件中打印列表?,awk,sed,yaml,Awk,Sed,Yaml,我正在寻找一种优化的方法,使用sed或/和awk在YAML文件中打印特定列表。 例如,在下面的示例yaml文件中,如何在屏幕上单独打印水果列表,比如逗号分隔 输入文件:boston_mart.yaml 使用awk我能做到的是在“水果”之后打印,但我也希望只有在单词前面有“-”时才打印另一个continion。这就是我被困的地方。任何帮助或指示都将非常有用 ## YAML Market: open Season: fall Fruits: - apple - orange - banana - g

我正在寻找一种优化的方法,使用sed或/和awk在YAML文件中打印特定列表。 例如,在下面的示例yaml文件中,如何在屏幕上单独打印水果列表,比如逗号分隔

输入文件:boston_mart.yaml 使用awk我能做到的是在“水果”之后打印,但我也希望只有在单词前面有“-”时才打印另一个continion。这就是我被困的地方。任何帮助或指示都将非常有用

## YAML
Market: open
Season: fall
Fruits:
- apple
- orange
- banana
- grapes
Vendors: 7
Buyers: 5
Vegetables:
- tomato
- carrot
- broccoli
Location: Boston
输出
sed-n'/^Fruits:/,//^[^-]/{//b;s//^-//p}--数据
其中:

  • -n
    默认情况下不回显输入
  • /…/,/…/
    处理从'Fruits:'到不以'-'开头的行的范围(包括EOF)
  • //b
    如果最后一个正则表达式匹配,则跳过行(即范围边界)
  • 否则,请删除划线和打印线
输出:

apple
orange
banana
grapes
sed-n'/^Fruits:/,//^[^-]/{//b;s//^-//p}--数据
其中:

  • -n
    默认情况下不回显输入
  • /…/,/…/
    处理从'Fruits:'到不以'-'开头的行的范围(包括EOF)
  • //b
    如果最后一个正则表达式匹配,则跳过行(即范围边界)
  • 否则,请删除划线和打印线
输出:

apple
orange
banana
grapes
这可能适用于您(GNU-sed):

复制钥匙

将副本附加到每行

如果一行从
-
开始并包含所需的键,则打印其值。

这可能适用于您(GNU-sed):

awk '$1~/:/{key=$1}   key~/Fruits:/&&$1=="-"{print $2} ' file
复制钥匙

将副本附加到每行

如果一行从
-
开始并包含所需的键,则打印其值

awk '$1~/:/{key=$1}   key~/Fruits:/&&$1=="-"{print $2} ' file
输出:
苹果
橙色
香蕉
葡萄

输出:
苹果
橙色
香蕉

grapes

我们鼓励提问者展示他们迄今为止为自己解决问题所做的努力。请将您希望的输出(无描述)添加到您的问题中(无评论)。我们鼓励提问者展示他们迄今为止为自己解决问题所做的努力。请添加您希望的输出(无描述)对于您的问题的示例输入(无评论)。您介意解释一下“键”在这两个地方是如何使用的吗?不客气。这个论坛是为了帮助人们使用他们的代码,但我发布这个论坛是为了让你有机会了解它是如何工作的,因为你没有发布任何代码。因此,请阅读awk手册页,添加一些印刷品,谷歌或做任何你必须做的事情来尝试自己弄清楚它,然后自由地问任何具体的问题(但这是非常常见的,琐碎的代码)。你介意解释一下“键”在这两个地方是如何使用的吗?不客气。这个论坛是为了帮助人们使用他们的代码,但我发布这个论坛是为了让你有机会了解它是如何工作的,因为你没有发布任何代码。因此,请阅读awk手册页,添加一些打印,谷歌或做任何你必须做的事情来尝试自己弄清楚它,然后自由地问任何具体的问题(但这是非常常见的,琐碎的代码)。
awk '$1~/:/{key=$1}   key~/Fruits:/&&$1=="-"{print $2} ' file