2012-01-30 94 views
2

所以我已經申請在$ 1至極這個sed命令是一個文件 想什麼,我知道的是如何SED評估所有的斜線,反斜線 繼承又是什麼在模式中的任何字符意味着sed的模式命令

sed '/^\/\*/d/.*\*\//d' $1 

據我知道

'/^ ....../d' 

在刪除行首一些圖案(考慮第二d)

- 什麼第一個d代表什麼,點和/或/ \(unescape字符?)

可以請有人向我解釋這一點嗎?

+2

請閱讀http://www.grymoire.com /Unix/Sed.html。祝你好運。 – shellter 2012-01-30 16:09:55

回答

3

這實際上是兩個sed命令背靠背:

/^\/\*/d 
/.*\*\//d 

^比賽開始線,\/文字斜槓匹配,\*文字星號匹配。 (由於正斜槓和星號是「元字符」,他們需要用一個反斜槓轉義逐字匹配。)

.*任何字符序列匹配,\*文字星號再次匹配,\/文字斜線相匹配再次。

把它放在一起,而這樣做是刪除C風格的註釋,但只有當他們出現在一行的開頭:

/* This will go away */This will stay 
+0

如果/*....*/更改爲//我只會有 /^\/\/\.*/d,我會看清所有/*....*/ inline ? 如果註釋在多行上延伸(我將不得不使用某種分隔符或用一些if的方法解決) – 2012-01-30 16:31:42

+1

是的,您的示例會從'//'刪除到行尾,但只有在它從行首開始(因爲你用'^'錨定它)。我不認爲你可以使用sed來處理多行註釋;你需要像perl或awk這樣的有狀態的東西。 – Nemo 2012-01-30 16:49:12

+0

這幫助你很棒 – Hovanky 2013-08-14 06:50:47