2012-06-11 59 views
0

我有這樣提取特定的詞使用的sed

BR_MALLOC %p File - %s, Func - %s, Line - %u\n 

的線這實際上是從一個C程序,它輸出malloced地址,其中,所述定製的malloc BR_MALLOC被稱爲文件等等等等的線

現在,我在此輸出運行sed得到公正的malloced地址(%p)

我想這正則表達式

$ echo "BR_MALLOC %p File - %s, Func - %s, Line - %u\n" | sed 's/BR_MALLOC\s+\(\S+\).*/\1' 

期望輸出

%p 

輸出我得到的是

BR_MALLOC %p File - %s, Func - %s, Line - %un 

我要去哪裏錯了?

回答

1

您可能需要逃避+docs):

echo "BR_MALLOC %p File - %s, Func - %s, Line - %u\n" | sed 's/BR_MALLOC\s\+\(\S\+\).*/\1/' 
%p 
+0

你能解釋一下爲什麼你添加了'?',以及你指的是什麼貪婪的匹配? –

+0

我試過你的建議,我得到這個錯誤 's':'s'命令的RHS上的'sed:-e表達式#1,字符28:無效引用\ 1。如果我脫掉'-r',則發生舊的輸出。即'''不起作用:( –

+0

)如果你確定你已經正確複製並粘貼了,那麼我們的'sed'版本的行爲就會有所不同。嘗試從'\('和'\)'轉義出來我的GNU sed版本4.2.1) –

1

不知道sed的,但用Perl你的表情會的工作幾乎原樣:

perl -pe 's/BR_MALLOC\s+(\S+).*/$1/' 
+0

儘管我目前正在使用'sed',我一定會記住你的'perl'解決方案。謝謝!和+1 :) –