簡體   English   中英

Bash:循環遍歷目錄,查找文件並在連接單詞后打印匹配行

[英]Bash: Loop through a directory, find files and print matching lines after concatenation with a word

我在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'的行extend: 'Ext.data.Model'並解壓縮部分: Ext.data.Model

將提取的部分連接起來and include -namespace {Extracted_Part}

最終將輸出打印到文件或控制台。

輸出將是這樣的

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

提前致謝。

嘗試:

for i in `find ./js/common -type f -name "*.js"`; do grep "extend: .*," $i | sed "s/.*'\(.*\)'.*/and include -namespace\1/" | tr '\n' ' ' ; done

我想不需要檢查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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM