O SED está tentando puxar um rápido no moi (problema de referência anterior)?

0

Estou tentando extrair a subexpressão terceira desta linha:

#EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users"

(sim, o arquivo adduser.conf , para aqueles que estão curiosos) com:

sed 's/\(EXTRA_GROUPS=\)\("\)\(.*\)\("\)//' adduser.conf

Enquanto isso funciona e produz

#dialout cdrom floppy audio video plugdev users

(Eu deixei o símbolo # fora da expressão, por isso desconsidere),

sed 's/\(EXTRA_GROUPS=\)\("\)\(.*\)\("\)//3' adduser.conf

não faz e deixa o arquivo como está.

Eu percebo que o último exemplo deve excluir de volta o número de referência três, mas quando modifico o comando com /sd/3 ("substitui a terceira subexpressão por sd ") ele também não faz nada.

Eu tentei executar o comando com -n //p options-all para o mesmo resultado.

Estou usando o GNU sed versão 4.2.2 em uma caixa do Debian Jessie.

Eu perdi alguma parte crucial da minha principal "educação" de serviços públicos ou é porque eu não estou no sol há algum tempo?

    
por Max 04.04.2017 / 13:03

1 resposta

4

A /n bandeira para o comando substituto s in sed não tem nada a ver com a referência anterior \n .

  • Com, por exemplo, s/regex/string/3 , você substitui a terceira correspondência de regex (na linha atual) por string .
  • Com s/regex// , você substitui a primeira correspondência de regex pelo terceiro grupo de captura.
  • Com s/regex//3 , você substitui a terceira correspondência de regex pelo terceiro grupo de captura.

Nesse caso, provavelmente usaria algo mais simples, como

sed 's/^.*EXTRA_GROUPS="\([^"]*\)".*$//'

Não adianta capturar bits da string se você não estiver usando.

    
por 04.04.2017 / 13:13