首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用find、sed和awk在目录结构中搜索

使用find、sed和awk在目录结构中搜索
EN

Stack Overflow用户
提问于 2018-05-06 22:11:02
回答 1查看 354关注 0票数 1

这一系列命令编辑idea.js并将其导出为idea.csv;

代码语言:javascript
复制
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相同的目录中。

我试过很多种方法,但我的错误不一样。

这里的结果并不是人们期望的那样:

代码语言:javascript
复制
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 {} \;

在这里:

代码语言:javascript
复制
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 {} \) 

我知道这个错误:

代码语言:javascript
复制
    idea, description
awk: cannot open {} (No such file or directory)
find: missing argument to `-exec'
Try 'find --help' for more information.

我想学习如何直接从命令行执行这个操作,并作为一个脚本以这样的方式执行:

代码语言:javascript
复制
$ sh script.sh

我很感激你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-05-10 17:33:20

代码语言:javascript
复制
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脚本中:

代码语言:javascript
复制
#!/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

然后为所有找到的路径名调用此脚本:

代码语言:javascript
复制
find . -type f -name idea.js -exec ./script.sh {} +
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50205001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档