我想\includegraphics
从.tex
文件中删除以获取文件名列表,如下例所示。我想删除x
并y
得到I
something {\includegraphics[width=0.5\textwidth]{/tmp/myfile.pdf} somethingelse
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxIIIIIIIIIIIIIIIyyyyyyyyyyyyyyy
以下示例不适用于 GNU sed 4.5。我应该如何正确地避开大括号,以便正确匹配?
echo "something {\includegraphics[width=0.5\textwidth]{" | sed -e "s/^*.\\includegraphics\[*.\]\{//"
不要逃避
{
or}
。这样做会让人sed
认为您正在使用正则表达式重复运算符(如\{1,4\}
匹配前一个表达式一到四次)。这是一个基本的正则表达式运算符,扩展的正则表达式等效项是不带反斜杠的。在扩展的正则表达式(与 一起使用
sed -E
)中,您确实希望同时转义{
和}
。如果您发现很难记住何时转义以及何时不转义这些字符,您可以始终在基本表达式和扩展表达式中使用[{]
和匹配它们。[}]
您还可以
*.
在我认为您的意思的两个地方使用.*
. 顺便说一句,*
正则表达式开头的 a (或^
在开头之后)将匹配文字*
字符。至于实际的
sed
命令,我可能会使用以下命令:要删除所有不包含任何
\includegraphics
命令的行,您可以添加一个简单的d
命令:这将适用于您的示例,但如果
somethingelse
行尾的 包含{
字符则无效。