sed -r não é compatível com -i

0

Eu tenho um arquivo de texto simples:

>cat a
A=B

Usando o sed, estou tentando alterar isso para:

setenv A B

Meu comando sed que não funciona é:

>sed -ir 's/([^\=]+)\=(.*)/setenv  /' a
sed: -e expression #1, char 30: invalid reference  on 's' command's RHS

No entanto, as mesmas palavras de comando quando eu removo a opção -i:

>sed -r 's/([^\=]+)\=(.*)/setenv  /' a
setenv A B

Eu não tenho esse problema quando uso uma expressão regular básica:

>sed -ir 's/\([^=]*\)=\(.*\)/setenv  /' a
>cat a
setenv A B

Minha versão sed é:

>sed --version
sed (GNU sed) 4.2.2

Alguma sugestão sobre o que poderia estar errado?

    
por Pradeep Anchan 10.07.2018 / 12:07

1 resposta

2

A opção -i do GNU Sed é um pouco não-conforme, pois pode opcionalmente aceitar um argumento especificando um sufixo de backup

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

Portanto, sed -ir 's/pattern/replacement' a significa "editar o arquivo a no lugar, criando um arquivo de backup ar " em vez de "editar o arquivo a no local, usando a sintaxe de expressão regular estendida"

Você quer

sed -i -r 's/pattern/replacement' a

ou (IMHO menos claro)

sed -ri 's/pattern/replacement' a
    
por 10.07.2018 / 12:25

Tags