J'ai un fichier TOML dans le format suivant (les catégories peuvent avoir n'importe quel nom, la numérotation séquentielle n'est qu'un exemple et non garantie):
[CATEGORY_1]
A=1
B=2
[CATEGORY_2]
C=3
D=4
E=5
...
[CATEGORY_N]
Z=26
Ce que je veux réaliser est de récupérer le texte dans une catégorie donnée.
Donc, si je spécifie, disons, [CATEGORY_1]
Je veux que cela me donne la sortie:
A=1
B=2
J'ai essayé d'utiliser grep
pour atteindre cette tâche, avec le drapeau z
, il pourrait donc interpréter les nouvelles lignes comme des caractères nuls et utiliser cette expression régulière:
(^\[.*]) # Match the category
((.*\n*)+? # Match the category content in a non-greedy way
(?=\[|$)) # Lookahead to the start of other category or end of line
Cela ne fonctionnait pas à moins que je retiens le ^
au début de l'expression. Cependant, si je fais cela, il interprétera mal interpréter des paires de parenthèses en tant que catégorie.
Y a-t-il un moyen de le faire correctement? Sinon avec grep
, avec un autre outil, tel que sed
ou awk
.
Si je vous comprends correctement, vous pouvez utiliser cette commande sed
:
# Choose the category until the next [ character
# and then delete any line starting with the [ character
$ sed -n '/^\[CATEGORY_2\]/,/^\[/p' file | sed '/^\[/d'
C=3
D=4
E=5