[英]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.