2015-06-28 60 views
-1

我有許多文件(.js文件),在目錄和子目錄下。我想用原始行加上print.f("filename" with linenumber");來替換以';'結尾的行。它的實際文件名和行號在哪裏被找到。替換許多js文件中的字符串

示例 - 以';'結尾的行

var x = 5; 

應與

var x = 5;print.f("test.js with line number 16"); 

test.js16替換是其中var x = 5;分別發現的文件名和行號。

編輯

的test.js和16樣本,在輸出應該是文件名和linemunber

回答

1

如果您在使用awk靈活:

awk '{printf $0} /.*\;$/{printf " print.f(\"" FILENAME " with line number " NR "\");"} {printf "\n"}' filename 

這將每當線路以;結束時,添加print.f語句。

除非您有GNU awk 4.1.0或更高版本,否則您必須將命令的輸出臨時寫入文件,然後將其移回。

對於GNU awk 4.1.0及以上版本,您可以使用-i選項進行就地文件編輯。

gawk -i '{printf $0} /.*\;$/{printf " print.f(\"" FILENAME " with line number " NR "\");"} {printf "\n"}' filename 

要找到所有.js文件,並運行在其上的上述gawk命令:

find . -type f -name "*.js" | xargs gawk -i '{printf $0} /.*\;$/{printf " print.f(\"" FILENAME " with line number " NR "\");"} {printf "\n"}' 
+0

嗨Jenish,謝謝。我嘗試了awk命令,但它給出了一個錯誤,說awk:讀取錯誤(是一個目錄),當我給頂部的目錄名稱。它是否適用於目錄下,其下有子目錄和文件。 – Suresh

+0

@Suresh我已經更新了我的答案。 –