从我读到的关于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>
-->
答案 0 :(得分:1)
在单引号('
)之间,反斜杠被解释为“真正的反斜杠”,因此转义字符不会被解释为“。
您可以通过在报价环境中使用不带反斜杠的新行来解决此问题:
sed -e '/UNCOMMENT THIS/,/jmx/ {
/foo/d
/test/d
}' \
test.txt
如您所见,您需要在命令末尾提供反斜杠,以确保test.txt
与命令调用组合在一起。但bash
会自动将内容分为两个单引号。