通过查看http://rubular.com/r/9zDHFh0gGc给出了最佳问题描述。为什么sed
不能那样工作?我认为问题取决于片段中的反斜杠\
,例如{1+\cos^2 t + t^2}
确切地说,我想在源中替换
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
通过命令sed -r 's/\\vvvec[[:space:]]*\{([^\}]*)\}[[:space:]]*\{([^\}]*)\}[[:space:]]*\{([^\}]*)\}/\\begin\{pmatrix\}\1\\\\\2\\\\\3\\end\{pmatrix\}/g' source
并希望得到结果
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
时,它会停止工作。
答案 0 :(得分:0)
字符类中不需要反斜杠,实际上它会向类添加反斜杠。因此\{([^\}]*)\}
与{\cos t}
不匹配。
所以,这似乎有效:
sed -r 's/\\vvvec[[:space:]]*\{([^}]*)\}[[:space:]]*\{([^}]*)\}[[:space:]]*\{([^}]*)\}/\\begin\{pmatrix\}\1\\\\\2\\\\\3\\end\{pmatrix\}/g'
答案 1 :(得分:0)
要正确处理反斜杠,您可以:
将 \
翻译为 @
$ tr '\\' '@' <input.txt
运行 sed
命令(也使用 @
作为 \
)< / p>
$ sed ... >output.txt
将 @
翻译回 \
$ tr '\\' '@' <output.txt
最后,管道所有这些命令