sed:未终止的地址正则表达式

时间:2015-05-25 09:02:33

标签: linux bash sed

从我读到的关于sed的内容来看,括号内的多个指令应该可以正常工作。

第二个sed命令工作正常 但是为什么下面的第一个sed命令会失败?

echo "-------"

sed -e '/UNCOMMENT THIS/,/jmx/ { \
    /foo/d \
    /test/d \
}' \
test.txt

echo "-------"

sed -e '/UNCOMMENT THIS/,/jmx/ { /foo/d; /test/d }' \
test.txt

echo "-------"

Test.txt

  <!--  To enable authentication security checks, uncomment the following security domain name -->
  <!--UNCOMMENT THIS
  foo
  test
  <property name="securityDomain">jmx-console</property>
  -->

1 个答案:

答案 0 :(得分:1)

在单引号(')之间,反斜杠被解释为“真正的反斜杠”,因此转义字符不会被解释为“。

您可以通过在报价环境中使用不带反斜杠的新行来解决此问题:

sed -e '/UNCOMMENT THIS/,/jmx/ {
    /foo/d
    /test/d
}' \
 test.txt

如您所见,您需要在命令末尾提供反斜杠,以确保test.txt与命令调用组合在一起。但bash会自动将内容分为两个单引号。