2016-01-30 264 views
2

字符串打印模式如何只打印字符串figure有以下行:sed的 - 與特殊字符

\begin{figure}[h!] 

我想:

firstLine='\begin{figure}[h!]' 
echo $firstLine | sed -n 's/\\begin{\(.*\)}/\1/p' 

但回報:

figure[h!]代替的figure

它看到MS這個問題來自[]!字符...

感謝您的幫助

回答

0
firstLine='\begin{figure}[h!]' 
echo "$firstLine" | sed 's/.*{\(.*\)}.*/\1/' 

輸出:

 
figure 

與您的代碼(添加.*):

echo $firstLine | sed -n 's/\\begin{\(.*\)}.*/\1/p' 
+0

謝謝,我認爲\(。* \)是由\ 1/p打印的模式,但它也包含了其餘的結束行 – youpilat13

0

這可能適用於你(GNU sed):

sed 's/.*{\(.*\)}.*/\1/' file 

這裏假定只有一個{...}表達式和一行。

更嚴格的解決辦法是:

sed -n 's/.*\\begin{\([^}]*\)}.*/\1/p' file 

但是不會有任何輸出,如果沒有找到匹配。