Evento não encontrado na chamada sed no script csh

3

Eu tentei o código como indicado em excluir texto entre chaves

no entanto, estou enfrentando esse erro diferente em relação ao evento no sed.

O arquivo

contém:

This is {
{the multiline
text} file }
that wants
{ to {be
changed}
} anyway.

sed ':again;$!N;$!b again; s/{[^}]*}//g' file

o que está supostamente dando errado no treino?

Erro

N: Event not found.
    
por JigarGandhi 01.12.2014 / 10:35

2 respostas

5

Você precisa escapar de ! para impedir que csh/tcsh realize a expansão do histórico. Eles ainda fazem expansão de histórico, embora você tenha escrito ! em aspas simples.

Tente:

sed ':again;$\!N;$\!b again; s/{[^}]*}//g' file

Ou você pode escrever um script com uma chamada -f script.sed (Leia sed FAQ ).

    
por 01.12.2014 / 11:31
-1

Não estou familiarizado com tcsh , mas isso parece um problema de expansão de histórico. Em bash aspas simples impedem a expansão do histórico, talvez em tcsh elas não o fazem.

Você pode desabilitar a expansão do histórico (mas não sei como fazer isso; em bash isso é feito por set +H ).

Outra opção: escapes de barra invertida devem funcionar. Experimente

sed_code=":again;\$\!N;\$\!b again; s/{[^}]*}//g"
sed "$sed_code" file
    
por 01.12.2014 / 10:56