这一系列命令编辑idea.js并将其导出为idea.csv;
sed -n '/^get\.idea/s/^.*(\(.*\)).*/\1/ p' idea.js |
awk -F, 'BEGIN {print "idea, description";OFS=","} (NR % 2 ) == 1
{save=$2} (NR % 2) == 0 {print save, $2}' > idea.csv我需要做的是运行完全相同的命令,但使用find搜索多个idea.js名称相同的文件,这些文件位于多个idea.js目录中,每个文件都导出到与idea.js相同的目录中。
我试过很多种方法,但我的错误不一样。
这里的结果并不是人们期望的那样:
find . -type f -name "idea.js" \( \
-exec sed -n '/^get\.idea/s/^.*(\(.*\)).*/\1/ p' idea.js {} \; -o \
-exec true \; \) \
-exec awk -F, 'BEGIN {print "idea, description";OFS=","} (NR % 2 ) == 1
{save=$2} (NR % 2) == 0 {print save, $2}' > idea.csv {} \;在这里:
find . -type f -name "idea.js" \(
-exec sed -n '/^get\.idea/s/^.*(\(.*\)).*/\1/ p' idea.js |
awk -F, 'BEGIN {print "idea, description";OFS=","} (NR % 2 ) == 1
{save=$2} (NR % 2) ==0 {print save, $2}' > idea.csv {} \) 我知道这个错误:
idea, description
awk: cannot open {} (No such file or directory)
find: missing argument to `-exec'
Try 'find --help' for more information.我想学习如何直接从命令行执行这个操作,并作为一个脚本以这样的方式执行:
$ sh script.sh我很感激你的帮助。
发布于 2018-05-10 17:33:20
find . -type f -name idea.js -exec sh -c '
for idea do
sed -n "/^get\.idea/s/^.*(\(.*\)).*/\1/ p" "$idea" |
awk -F, "BEGIN {print \"idea, description\";OFS=\",\"} (NR % 2 ) == 1
{save=\$2} (NR % 2) == 0 {print save, \$2}" >"${idea%.js}.csv"
done' sh {} +这使您的shell代码片段大致不变(除了我已经安排好了代码中的单引号现在是双引号,输出文件名是通过替换扩展名从输入文件名计算出来的),并通过find执行。find将为代码提供idea.js文件的路径名列表,代码将遍历这些路径名。
另一种方法是将代码放入shell脚本中:
#!/bin/sh
for idea do
sed -n '/^get\.idea/s/^.*(\(.*\)).*/\1/ p' "$idea" |
awk -F, 'BEGIN {print "idea, description";OFS=","} (NR % 2 ) == 1
{save=$2} (NR % 2) == 0 {print save, $2}' > "${idea%.js}.cvs"
done然后为所有找到的路径名调用此脚本:
find . -type f -name idea.js -exec ./script.sh {} +https://stackoverflow.com/questions/50205001
复制相似问题