Sua expressão informa a sed
para corresponder a <?xml.*><Haystack
ou Foo
. O mecanismo Regex usa o parêntese de captura para informar até onde a esquerda ou a direita estende o operador or
. (Se você usasse um motor PCRE, você poderia usar parênteses sem captura).
Código problemático original:
echo "20150310 21:12:01.846338::: <?xml version="1.0"?><Haystack><Event " \
| sed 's/^\(.\{24\}\)::: \(<?xml.*><Haystack\|Foo\)>\(.*\)/ ts=\"\">/'
Código fixo:
echo "20150310 21:12:01.846338::: <?xml version="1.0"?><Haystack><Event " \
| sed 's/^\(.\{24\}\)::: \(<?xml.*>\)<\(Haystack\|Foo\)>\(.*\)/< ts=\"\">/'