2013-01-04 308 views
1

任何人都可以告訴我一個匹配行的開始或結束的正則表達式嗎?例如如果我使用sed 's/[regex]/"/g' filehere輸出將在每行引號?我試過[\^$][\^\n],但他們都沒有工作。我可能失去了一些東西很明顯,我是新來的這些正則表達式匹配行的開頭和結尾?

+0

請使用您的問題的所有必要標籤。正則表達式是一個廣義的術語。 – inhan

回答

4

嘗試:

sed -e 's/^/"/' -e 's/$/"/' file 
+0

完美的工作!感謝您的幫助:) –

+1

不需要「g」,因爲線條的開始和結束都不會出現多次。 –

3

要添加引號來開始和每行的末尾很簡單:

sed 's/.*/"&"/g' 

重你試圖拿出來匹配每行的開始或結束,但是,是:

sed -r 's/^|$/"/g' 

它的一個ERE(ena可以通過「-r」),所以它可以與GNU sed一起使用,但不能使用較老的seds。

0

matthias的回答完全合適,但您也可以使用反向引用來執行此操作。如果你正在學習正則表達式,它們是一個方便的知識。

這裏,將如何使用反向引用來完成:

sed 's/\(^.*$\)/"\1"/g' file 

在該正則表達式的心臟爲^.*$,這意味着匹配線路(^)開始包圍東西(.*)和結束($),這實際上意味着它將每次匹配整行。

將這個術語放在括號內創建一個反向引用,我們稍後可以引用(在替換模式中)。但是爲了讓sed意識到你的意思是創建反向引用而不是匹配文字括號,你必須用反斜槓將它們轉義。因此,我們以\(^.*$\)作爲我們的搜索模式。

替換模式只是一個雙引號,後面跟着\1,這是我們的反向引用(引用括起來的第一個模式匹配,因此是1)。然後添加您的最後一個雙引號,以"\1"結束。

+1

^。* $與。*相同,^和$是多餘的。當整個RE匹配時,您也不需要反向引用特定的匹配字符串 - 這就是&的目的。 –

+0

表示同意,但爲了清楚起見,我把它們扔在那裏。我的回答更傾向於展示如何使用反向引用,而不是如何解決特定的場景。 – nullrevolution

+0

這很好,但如果能夠向OP顯示他的具體問題的答案也是有用的,所以他不認爲這是做這件事的最好方法。 –

相關問題