要求 sed 忽略所有特殊字符

bob*_*lan 4 sed regular-expression

我使用以下代码来删除一行:

sed -i "0,/$DELETE_THIS/{/$DELETE_THIS/d;}" file.txt
Run Code Online (Sandbox Code Playgroud)

但如果变量DELETE_THIS包含特殊字符,例如.、等/,则此代码将失败...*

有没有办法告诉sed忽略所有特殊字符并将它们用作基本文本?

Ale*_*exP 6

  • 您在 中有一个字符串,您希望以按字面意思处理它的方式$DELETE_THIS传递该字符串。sedsed

  • 为此,您必须引用所有对 有意义的字符sed

  • 在它们前面加一个反斜杠。例如,使用 Bash 语法:

    DELETE_THIS="$(<<< "$DELETE_THIS" sed -e 's`[][\\/.*^$]`\\&`g')"
    
    Run Code Online (Sandbox Code Playgroud)
  • 例如,这将转换^ab[c-d]\ef$\^ab\[c-d\]\\ef\$.