我有一个包含许多子目录的目录。在所有这些子文件夹中,我们有* .yml文件。
文件名如下:
file-name-daily-1.yml
file-name-daily-2.yml
file-name-weekly-1.yml
file-name-weekly-2.yml
file-name-monthly-1.yml
在每个文件中都有一行如下:
- name: Some line of text here
我的命令如下:
node index.js --epr --run "[my matched string]" -p $D -p $F -p $T
我需要一个bash脚本,它会以递归方式在目录中搜索包含关键字(每日,每周,每月,每天等)的文件,然后抓取"之后的文本:"在匹配的文件中。然后我需要针对每场比赛运行我的命令。
这个伟大的社区将如何完成这项任务?
答案 0 :(得分:2)
这可以在没有循环的情况下完成,如下所示:
find DIR/ -name *.yml -exec sh -c "grep '\- name\:.*' {} | sed 's/\-name:\(.*\)/\1/'| xargs -I '{}' yourcommand --yourargument {}" \;
其中yourcommand
将替换为您要使用find
的结果运行的命令。
此脚本首先find
通配符表达式匹配的文件。
然后执行一个命令,使用grep
查找文件的相关行,并使用sed
修改输出以获得相关文本。
最后,参数被传送到yourcommand
,占位符{}
取代了参数。
您可以使用
测试代码find DIR/ -name *.yml -exec sh -c "grep "^\- name:" {} | sed 's/\-name:\(.*\)/\1/' | xargs -I '{}' echo \"node index.js --epr --run {} -p $F -p $T -p $D1\"" \;
并在对结果感到满意后删除echo
。
答案 1 :(得分:1)
可能使用find
作为潜伏者提到的。
pattern="*-daily*"
for match in $(find . -name $pattern -exec grep '\- name:' {} \; | awk -F ': ' '{print $2}'); do
node index.js --epr --run "${match}" -p $D -p $F -p $T
done