最好的问题描述是通过查看http://rubular.com/r/9zDHFh0gGc给出的。 sed
为什么不能像那样工作?我认为问题取决于片段中的那些反斜杠\
,例如{1+\cos^2 t + t^2}
。
在精确我想通过命令sed -r 's/\\vvvec[[:space:]]*\{([^\}]*)\}[[:space:]]*\{([^\}]*)\}[[:space:]]*\{([^\}]*)\}/\\begin\{pmatrix\}\1\\\\\2\\\\\3\\end\{pmatrix\}/g' source
源sed替换模式中的反斜杠?
Test Text
= \int_0^{\pi}\vvvec
{1+\cos^2 t + t^2}
{1+ \sin^2 t + t^2}
{1 + 2 t^2}
\cdot \vvvec{-2\cos t \sin t}{2\cos t \sin t}{2t}\ud t =
Ende
替代和希望得到的结果
Test Text
= \int_0^{\pi}\begin{pmatrix}1+\cos^2 t + t^2\\1+ \sin^2 t + t^2\\1 + 2 t^2\end{pmatrix}
\cdot \begin{pmatrix}-2\cos t \sin t\\2\cos t \sin t\\2t\end{pmatrix}\ud t =
Ende
对不起 - 我不明白,为什么不工作。
字符串似乎没问题,因为echo "\vvvec{1}{2}{3}" | sed -r 's/\\vvvec[[:space:]]*\{([^\}]*)\}[[:space:]]*\{([^\}]*)\}[[:space:]]*\{([^\}]*)\}/\\begin\{pmatrix\}\1\\\\\2\\\\\3\\end\{pmatrix\}/g' \begin{pmatrix}1\\2\\3\end{pmatrix}
工作正常。 例如在一个组件中插入\sin
时,它停止工作。
这是一个很好的解释:谢谢。但是现在,只有第二行“源”光圈被转换 - 第一行没有。我认为'[:space:]'包含换行符,不是吗?来自:isspace() 检查空格字符。在“C”和“POSIX”语言环境中,它们是:空格,form-feed('\ f'),换行符('\ n'),回车符('\ r'),水平制表符('\ t' )和垂直标签('\ v')。 – 2012-02-28 12:42:32
它确实但sed默认单独处理每行。但你可以绕过它:http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/ – Joni 2012-02-28 13:54:23