2015-09-09 32 views
1

我有一個Java項目,其中我有javadoc註釋如何使用sed刪除Java項目的註釋?

/** ... */ 

等多線評論

/* ... */ 

行註釋

// ... 

和我自己的 「解釋性意見」

//* ... 

當我釋放我的代碼時,我希望所有行註釋都不會被其他註釋去掉–。我雖然會用sed來做,但到目前爲止我還沒有成功。我正在嘗試以下操作:

#!/bin/bash 

while read -d $'\0' findfile ; do 
    echo "${findfile}" 
    mv "${findfile}" "${findfile}".veryold 
    cat "${findfile}".veryold | sed -e 's|//[^\*"]*[^"]*||' -e 's/[ ^I]*$//' | grep -A1 . | grep -v '^--$' > "${findfile}" 
    rm -f "${findfile}".veryold 
done < <(find "${1}" -type f -print0) 

錯在哪裏?請注意,不應刪除//"...",因爲它們可能是網址的一部分。

的關鍵部分是

-e 's|//[^\*"]*[^"]*||' 
+2

你爲什麼要刪除你的評論? – Zarwan

+0

「乾淨的代碼」。不再需要的功能,長文本我打算在這裏做,但現在它已經實現,特別是替代解決方案。我喜歡在代碼中保留替代解決方案,以便稍後能夠查看它,但這不是我的同事或客戶想要看到的。這就是爲什麼我只想刪除這一類評論。有用的評論用我的*標記。 – Make42

+0

爲什麼我會爲這個問題得到一個downvote?它「顯示研究努力」,它是「清楚的」,它是有用的:在我最後的評論中,我解釋了爲什麼。也簡單地說:我會使用它(所以_顯然它是有用的。) – Make42

回答

0

對於測試文件看起來像這樣:

/** This should stay */ 
/* And this 
* should stay 
* as well */ 
// This one should be removed 
//* But this one should stay 
code here // This part should go, but not the next line 
"http://test.com" 
code here //* This should stay 

,你可以做這樣的:

$ sed '\#^//[^*]#d;s#//[^*"][^"]*$##' test.java 
/** This should stay */ 
/* And this 
* should stay 
* as well */ 
//* But this one should stay 
code here 
"http://test.com" 
code here //* This should stay 

第一個表達式,\#^//[^*]#d ,刪除所有以//(但不是//*)開頭的行。這是爲了避免在刪除整行時在輸出中出現空行。

第二個表達式,s#//[^*"][^"]*$##,從//上(但不//*//")匹配,直到該行的末尾,除非有//和線路的端部之間的"

你表達s|//[^\*"]*[^"]*||做幾乎一樣,不同的是:

  • 沒有必要逃避括號表達式字符; [\*]匹配\*
  • 您希望第一個括號表達式匹配一次,而不是零次或多次;你的表情確實與匹配//*
  • 您不會在行尾停留,因此此表達式匹配//無處不在,並將其刪除,即使後面跟着"*

對於在該行的最後一個零長度註釋的特殊情況下,

code here // 

,你會想刪除//,你必須添加第三個換人s#//$/#因爲現有的預期至少有一個字符在//之後。

請注意,這並不是非常乾淨,因爲它可能會在行尾留下無用的空間,但可以通過s/[[:space:]]*$/$/輕鬆修復。