我有一个充满 .yaml 文件的文件夹。在每个 yaml 文件中,我都有一个 url arg 等。我只是想获取一个电子表格,该电子表格的第一列中包含文件名,第二列中包含 url arg 的值。有一个简单的控制台命令可以做到这一点吗?
在 yaml 文件中,它看起来基本上是这样的
参数:
- {arg:文件名,值:“testfile”}
- {arg:url,值:“fakesite.com”}
目标是拥有一个电子表格,其中为文件夹中的每个 yaml 文件并排列出这两个值。
答案1
看一下yq,它是jq
.
答案2
对于一个文件:
res=$(echo 'args:
- {arg: file_name, value: "testfile"}
- {arg: url, value: "fakesite.com"}' | egrep "file|url")
echo $res
- {arg: file_name, value: "testfile"} - {arg: url, value: "fakesite.com"}
您可能需要缩小 grep 模式的范围,以减少误报:
egrep -- "- \{arg: (file_name|url), value: ")
因此,可以使用 find 或仅使用 for 循环的平面目录来收集文件名。文件名中没有空格或时髦字符吗?
for f in *.yaml; do res=$(egrep -- "- \{arg: (file_name|url), value: " $f); echo $res; done > yaml.csv
cat yaml.csv
- {arg: file_name, value: "testfile"} - {arg: url, value: "fakesite.com"}
- {arg: file_name, value: "testfile"} - {arg: url, value: "fakesite.com"}
或者更好的可读性
for f in *.yaml
do
res=$(egrep -- "- \{arg: (file_name|url), value: " $f)
echo $res
done > yaml.csv
从那里开始,这应该只是一个步骤。