Regex não combinando

3

por que isso não corresponde ...?

sed -e '/--Updated?[[:space:]]+Date/d' inputfile

isto ..:

--Updated Date: 2013-11-06 15:32:13

d? é porque às vezes eu tenho Update Date e, às vezes, Updated Date .

para remoção? Eu tentei com \s também, não funcionando.

    
por branquito 28.03.2014 / 16:10

3 respostas

6

você precisa usar o parâmetro -r . tente usar

sed -r '/--Updated?[[:space:]]+Date/d' inputfile

atualizando a resposta

Quando você usa sed '/something/d' , todas as linhas correspondentes a essa serão excluídas.

-r - o parâmetro -r usa expressões regulares estendidas.

Dentro da expressão tem 2 expressões regulares.

[[:space:]] - corresponde a todos os caracteres de espaço em branco, incluindo quebras de linha

? - optional

+ - uma ou mais vezes.

SO, o comando sed irá apagar todas as linhas que combinam com --updated e que um ou mais caractere de espaço em branco e que Data, mas por causa do? o caractere d é opcional. como:

--Updated Date: 2013-11-06 15:32:13
--Updated   Date: 2013-11-06 15:32:13
--Updated           Date: 2013-11-06 15:32:13
--Update Date: 2013-11-06 15:32:13
    
por 28.03.2014 / 16:17
5

Para fazer isso usando o regex básico POSIX, o mais próximo que posso chegar é:

sed '/--Updated*[[:space:]][[:space:]]*Date/d' inputfile

Infelizmente, não há substituto real para ? , então é usado um * que também corresponderia a vários d s. O + , no entanto, pode ser substituído simplesmente repetindo o padrão an usando um * para a segunda repetição.

Atualizar

Na verdade, a maneira de obter o efeito equivalente das expressões estendidas é usar dois padrões:

sed \'
  /--Updated[[:space:]][[:space:]]*Date/d
  /--Update[[:space:]][[:space:]]*Date/d
  ' inputfile
    
por 28.03.2014 / 16:30
2

Com o gnu sed 4.2.2 no cygwin, adicione o -r flag:

 '--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'

não imprime saída. -r ativa as expressões regulares estendidas, então ? e + funcionarão como você espera. A referência para expressões regulares estendidas eu uso a maioria dos pontos que ? e + tem que ter uma barra invertida em expressões regulares básicas (o padrão) para ter seu significado especial.

    
por 28.03.2014 / 16:17