Estou tentando identificar quais arquivos no meu projeto têm cabeçalhos incorretos. Todos os arquivos começam assim
---
header:
.
.
.
title:
some header:
.
.
.
more headers:
level:
.
.
.
---
Onde . . . representa apenas mais cabeçalhos. Os cabeçalhos não contém recuo. Usando a seguinte expressão, consegui extrair o cabeçalho YAML de todos os arquivos.
grep -Przo --include=\*.md "^---(.|\n)*?---" .
Agora quero listar os cabeçalhos YAML incorretos.
- Cada cabeçalho YAML deve ter um
title: some text
- Todo cabeçalho YAML deve ter
language: [a-z]{2}
- Deve conter um
external: .*
ouauthor: .*
. - A colocação de
title:
,level:
,external:
elanguage:
varia.
Eu tentei fazer algo como
grep -L --include=\*.md -e "external: .*" -e "author: .* ."
No entanto, o problema com isso é que ele pesquisa o arquivo inteiro, não apenas o cabeçalho YAML. Então, acho que resolver os problemas acima se resume a como posso alimentar o resultado do cabeçalho YAML da minha pesquisa anterior no grep novamente. eu tentei
grep -Przo --include=\*.md "^---(.|\n)*?---" . | xargs -0 grep "title:";
No entanto, isso me deu um erro "Nenhum arquivo ou diretório", então estou um pouco incerto sobre como proceder.
Exemplos:
---
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
---
Correto YAML, tem autor, idioma e título.
---
title: Mini Golf
level: 2
language: en
external: http://appinventor.mit.edu/explore/ai2/minigolf.html
---
YAML correto, tem título, idioma e externo em vez de autor.
---
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
---
Cabeçalho YAML incorreto, autor ausente.