示例条目:
post_content: " some <strong >blablablabla</strong> text in <html>"
post_title: Kontakt
post_password:
post_name: kontakt
问题: 我有一个带有上述条目的yaml文件,我想用cat&amp;解析post_content的内容。 grep并将其传递到不同的文件中。
$ cat posts.yaml | grep post_content >> different-file.yaml
这很有效。非常好:)但是这样我只能从* posts.yaml中取消所有 post_content 在它之上我喜欢将每个 post_content 分隔成单独的文件,名为 post_name.yaml - 我认为它可能与某些sed-foo合并在一行中壳命令。但我总是不知道这样做。
答案 0 :(得分:0)
尝试:
awk '/post_content:/{content=$0} /post_name:/{print content>$2".yaml"; close($2".yaml")}' posts.yaml
考虑这个测试文件:
$ cat posts.yaml
post_content: " some <strong >blablablabla</strong> text in <html>"
post_title: Kontakt
post_password:
post_name: kontakt
post_content: " some other text in <html>"
post_title: Kontakt
post_password:
post_name: contact
然后我们运行:
awk '/post_content:/{content=$0} /post_name:/{print content>$2".yaml"; close($2".yaml")}' posts.yaml
运行此命令后,除posts.yaml
外,还有当前目录中的两个新文件:
$ ls
contact.yaml kontakt.yaml posts.yaml
新文件的内容是:
$ cat kontakt.yaml
post_content: " some <strong >blablablabla</strong> text in <html>"
$ cat contact.yaml
post_content: " some other text in <html>"
/post_content:/{content=$0}
每次我们到达包含post_content:
的行时,我们都会将该行保存在变量content
中。
/post_name:/{print content>$2".yaml"; close($2".yaml")}
每次我们到达包含post_name:
的行时,我们都会打印变量content to a file whose name is given by the second field on the line followed by
。yaml`。