sed - 在具有特殊字符的字符串上打印图案

时间:2016-01-30 10:55:54

标签: sed

如何仅使用以下行打印字符串figure

\begin{figure}[h!]

我试过了:

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

但返回:

figure[h!]代替figure

问题似乎来自[]!字符......

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

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

输出:

figure

使用您的代码(添加.*):

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

答案 1 :(得分:0)

这可能适合你(GNU sed):

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

这假设只有一个{...}表达式和一行。

更严格的解决方案是:

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

但是,如果未找到匹配项,则不会输出任何内容。