Acho que há alguns problemas no seu comando sed
:
-
Você não usa a opção
-n
, portanto, por padrão,sed
apenas imprime cada linha de entrada na saída (possivelmente modificada por um comandosed
). -
Você não precisa do redirecionamento
< c3.xml
, porquesed
reconhece o último argumento como um nome de arquivo. -
sed
não é muito adequado para correspondências em várias linhas. Veja por exemplo aqui .
O seguinte parece funcionar no seu exemplo:
sed -n "/<fmreq:name>object_name<\/fmreq:name>/ {n;p}" c3.xml | sed "s/^\s*<fmreq:value>\(.*\)<\/fmreq:value>//g"
Ou, com apenas uma invocação de sed
:
sed -n "/<fmreq:name>object_name<\/fmreq\:name>/ {n;s/^\s*<fmreq:value>\(.*\)<\/fmreq:value>//g;p}" c3.xml
Repartição do que este comando faz:
-
A opção
-n
diz ased
para não imprimir o espaço padrão após terminar de processar a linha. Conseqüentemente, você precisa usar o comandop
explicitamente para fazer isso. -
/regex/
dizsed
para executar os comandos que seguem apenas nas linhas que correspondem aregex
. -
O
sed
commandn
substitui o conteúdo do espaço de padrão pela próxima linha de entrada, que é a que contém o valor em que você está interessado. -
O
sed
commands/regex/replacement/
substitui a primeira correspondência deregex
no espaço padrão porreplacement
. -
O comando
sed
p
imprime a linha.