
por que isso não corresponde ..?
sed -e '/--Updated?[[:space:]]+Date/d' inputfile
esse..:
--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 \s
também, não funcionou.
Responder1
você precisa usar o -r
parâmetro. tente usar
sed -r '/--Updated?[[:space:]]+Date/d' inputfile
atualizando resposta
Quando você usa sed '/something/d'
, todas as linhas que correspondem a isso serão excluídas.
-r
- o parâmetro -r usa expressões regulares estendidas.
Dentro da expressão temos 2 expressões regulares.
[[:space:]]
- Combine com todos os caracteres de espaço em branco, incluindo quebras de linha
? - optional
+
- uma ou mais vezes.
ASSIM, o comando sed excluirá todas as linhas que correspondam a --updated e que um ou mais caracteres de espaço em branco e que Date, 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
Responder2
Para fazer isso usando 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 a *
é usado, o que também corresponderia a vários d
s. O +
porém pode ser substituído simplesmente repetindo o padrão e usando a *
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
Responder3
Com gnu sed 4.2.2 no cygwin, adicione o -r
sinalizador:
'--Updated Date: 2013-11-06 15:32:13'|sed -r -e '/--Updated?[[:space:]]+Date/d'
não imprime nenhuma saída. -r
ativa expressões regulares estendidas ?
e +
funcionará como você espera. Oreferência para expressões regulares estendidasEu uso a maioria dos pontos ?
e +
preciso ter uma barra invertida em expressões regulares básicas (o padrão) para ter seu significado especial.