我正在尝试确定我的项目中哪些文件的标头不正确。文件都是这样开始的
---
header:
.
.
.
title:
some header:
.
.
.
more headers:
level:
.
.
.
---
在哪里 。. . 只代表更多的标题。标题不包含缩进。使用以下表达式,我已经能够从每个文件中提取 YAML 标头。
grep -Przo --include=\*.md "^---(.|\n)*?---" .
现在我想列出不正确的 YAML 标头。
- 每个 YAML 标头都必须有一个
title: some text
- 每个 YAML 标头都必须有
language: [a-z]{2}
- 它必须包含一个
external: .*
或author: .*
。 title:
、level:
和external:
的位置language:
各不相同。
我试着做类似的事情
grep -L --include=\*.md -e "external: .*" -e "author: .* ."
然而,这样做的问题是它会搜索整个文件,而不仅仅是 YAML 标头。所以我想解决上述问题归结为如何将我之前搜索的 YAML 标头结果再次输入 grep。我试过了
grep -Przo --include=\*.md "^---(.|\n)*?---" . | xargs -0 grep "title:";
然而,这给了我一个错误“没有这样的文件或目录”,所以我有点不确定如何继续。
例子:
---
title: Rull-en-ball
level: 1
author: Transkribert og oversatt fra [Unity3D](http://unity3d.com)
translator: Bjørn Fjukstad
license: Oversatt fra [unity3d.com](https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial)
language: nb
---
正确的 YAML,有作者、语言和标题。
---
title: Mini Golf
level: 2
language: en
external: http://appinventor.mit.edu/explore/ai2/minigolf.html
---
正确的 YAML,有标题、语言和外部而不是作者。
---
title: 'Stjerner og galakser'
level: 2
logo: ../../assets/img/ccuk_logo.png
license: '[Code Club World Limited Terms of Service](https://github.com/CodeClub/scratch-curriculum/blob/master/LICENSE.md)'
translator: 'Ole Andreas Ramsdal'
language: nb
---
YAML 标头不正确,缺少作者。