Conversão Regex

3

Eu estou querendo fazer um comando para editar /etc/default/grub e alterar o tempo limite de 10 a 2. Alguém poderia explicar como fazer isso?

    
por Temple Pate 30.04.2015 / 20:16

2 respostas

6

Você pode usar sed , perl e outras ferramentas para isso. Aqui estão dois exemplos para sed e perl :

Usando sed :

Comece uma corrida a seco

sudo sed 's/^GRUB_TIMEOUT=10$/GRUB_TIMEOUT=2/' /etc/default/grub

se estiver tudo bem, então

sudo sed -i 's/^GRUB_TIMEOUT=10$/GRUB_TIMEOUT=2/' /etc/default/grub

do homem sed :

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

          edit files in place (makes backup if SUFFIX supplied)

Explicação:

  • ^GRUB_TIMEOUT=10$

    Demo do Debuggex

    ^ - afirma a posição no início da string

    GRUB_TIMEOUT=10 corresponde aos caracteres GRUB_TIMEOUT=10 literalmente (sensível a maiúsculas e minúsculas)

    $ - asseverar posição no final da string

  • s - s-modificador: linha única

Usando perl e mais genérico:

Comece uma corrida a seco

perl -pe 's/^(GRUB_TIMEOUT=)[0-9]+$/2/' /etc/default/grub

se estiver tudo bem, então

sudo perl -pi -e 's/^(GRUB_TIMEOUT=)[0-9]+$/2/' /etc/default/grub
  • ^(GRUB_TIMEOUT=)[0-9]+$

    Demo do Debuggex

por A.B. 30.04.2015 / 20:21
1

Aqui está um genérico:

sudo sed -i.bak 's/^\(GRUB_TIMEOUT=\)[0-9]\+$//' /etc/default/grub

Substitua 2 (após ) por qualquer valor que você queira colocar.

  • s/OLD/NEW/ é o padrão de substituição para sed .

  • i.bak edita o arquivo /etc/default/grub no lugar, mantendo o backup do arquivo original como /etc/default.grub.bak . Se você não quiser um backup, use apenas -i .

  • Combinamos a linha que começa com GRUB_TIMEOUT= (Manteve-a dentro de um grupo para que possamos consultá-la mais tarde) e termina com um ou mais dígitos ( [0-9]+ ).

  • Na seção de substituição, substituímos os dígitos pelo valor que queremos colocar, mantendo a parte anterior correspondida (denotada por ) como é.

por heemayl 30.04.2015 / 20:36