0

我正在从事 Sencha Touch 项目。它有 js 文件,其中包含以下行:

Ext.define('AssetMenuModel', {
    extend: 'Ext.data.Model',
    config:{    
        fields: ['code','name']
    }
});

我们必须遍历带有*.js扩展名的文件的整个 JS 文件夹。我们可以通过以下方式做到这一点:

find ./js/common -type f -name "*.js"

找到行extend: 'Ext.data.Model'并提取部分:Ext.data.Model

用 连接提取的部分and include -namespace {Extracted_Part}

并最终将输出打印到文件或控制台中。

输出将是这样的

and include -namespace Ext.data.Model and include -namespace Ext.Panel.

提前致谢。

4

2 回答 2

2

尝试:

for i in `find ./js/common -type f -name "*.js"`; do grep "extend: .*," $i | sed "s/.*'\(.*\)'.*/and include -namespace\1/" | tr '\n' ' ' ; done
于 2013-07-26T09:35:43.377 回答
0

我想不需要检查该extend行是否在Ext.define块内。否则解决方案将复杂得多。这个js逐行读取每个文件并使用正则表达式查找该行并进行分组以提取字符串。我使用十六进制数字写单引号 ( \x27),因为脚本也被它们包围:

perl -ne '
    if ( m/\A\s*(?i)extend\s*:\s*\x27([^\x27]*)\x27/ ) { 
        printf qq|and include -namespace %s |, $1;
    } 
    END { print "\n" }
' $(find ./js/common -type f -name "*.js")

在我使用立即创建的两个虚拟javascript文件进行的测试中,产生:

and include -namespace Ext.data.Model and include -namespace Ext.Panel
于 2013-07-26T09:35:45.560 回答