Eu estou usando este comando para excluir várias ocorrências de uma linha no meu script e ele só funciona bem quando eu executá-lo no prompt de comando. No entanto, quando eu uso essa linha no meu script perl, ele gera um erro SED: syntax error no script.pl linha 19, próximo a "; $ '". Abaixo está a linha no meu script. Eu tentei escapar, mas essa ajuda
sed '/<\/data_item>/{N;/<\/data_item>$/{N;$'!'{s/\n//;D}}}' $WX
;
sed
não faz parte do Perl. Mas eu vou te dar o benefício da dúvida e assumir que você declarou sua própria sub-rotina chamadased
em outro lugar no seu script. Que prompt de comando você está dizendo que isso funcionou? Eu apenas tentei no bash e dá um erro. Devo dizer que estou confuso com o ponto de exclamação!
meio caminho. Talvez você possa fornecer a versão "prompt de comando" original e explicar o que está tentando fazer.Respostas:
OK, dando-lhe o benefício da dúvida (que você definiu sua própria sub-rotina chamada
sed
), sua instrução "Perl" é dividida da seguinte maneira:O erro de sintaxe real que você está recebendo é por causa do ponto de exclamação. Em Perl, você não pode simplesmente colocar caracteres fora de strings e fazer com que eles se concatenem com as strings circunvizinhas, como acontece com shell.
Mesmo no shell, não tenho certeza se a linha como você citou funcionaria. Então eu acho que você realmente precisa expandir sua pergunta original para progredir isso.
fonte
sed -i '2,\${/xml version/d;}' $WX
;sed -i '3,\${/top/{N;d;}}' $WX
;sed -i '3s/=.*\$/="check">/' $WX
; e todos eles simplesmente funcionam bem ..