2011-12-12 68 views
3

我想在包含關鍵字的行後刪除換行符,例如像修飾符private:,public:protected:來完成我們的編碼標準。我需要一個命令行工具(Linux),因此如果需要用戶交互,請不要使用Notepad ++,Emacs,VS或Vim解決方案。因此,換句話說,我想做一個:如何搜索並替換特定標記後的空行?

sed -i 's/private:\s*\n\s*\n/private:\n/g' 

我已經看到了這個question,但無法將其擴展到我的需要。

回答

1

如果我理解正確,您要刪除包含private:public:protected:的行後面的空行。

sed ':loop;/private:\|public:\|protected:/{n;/^$/d;Tloop}' inputfile 

說明:

  • :loop創建標籤
  • /private:\|public:\|protected:/將搜索包含圖案線條。
  • n;/^$/d將加載下一行(n),檢查它是否爲空行(/^$/),如果是,則刪除行(d)。
  • Tloop分支標記loop如果沒有匹配(行不爲空)

我沒有SED大師,可能有更優雅的方式來做到這一點。在awk,perl,python中,也可能有更優雅的方法來做到這一點。

+0

是的,謝謝,但它不適用於兩個修飾符在兩個連續的行後跟一個空行的同一個例子。與上面相同的問題,因爲如果sed獲取下一行,則此行不會再次被訪問。但你的解決方案看起來比我的更好:D – math

+0

編輯我的答案。 sed命令現在也應該涵蓋你提到的情況。 – lesmana

+0

太棒了,我得到它與Perl的工作:'perl -0777 -pi -e's /([\ t \ r] *)(private | protected | public):[\ t \ r] * \ n [\ t \ r] * \ n/$ 1 $ 2:\ n/g'',謝謝。順便說一下,你的sed命令還可以處理'private:'之前和之後的空格。修飾語? – math

0
perl -0777 -pi -e 's/([ \t\r]*)(private|protected|public):[ \t\r]*\n[ \t\r]*\n/$1$2:\n/g' file 

應該做的伎倆,同時還採取尾隨和前導空格進去,這是我的問題沒有規定,因爲這不是一個必須的要求。