Usando sed
para modificar o arquivo no local:
sed -i '/^\(report\|-t\(h\|o\)\)/!d' your_file
Isso instrui sed
a excluir todas as linhas que não correspondem ao padrão. O padrão em si é ^
(início da linha), seguido por um report
ou -t
seguido por um h
ou o
.
Observe que essa não é uma modificação real no local: sed
cria uma cópia de backup temporária e sobrescreve o arquivo original.
Se você deseja sed
manter uma cópia de backup do arquivo original (o que pode ser uma boa idéia se o arquivo contiver dados críticos), ofereça ao -i
switch uma extensão para criar um arquivo de backup:
sed -i'.bak' -e '/^\(report\|-t\(h\|o\)\)/!d' your_file
irá modificar your_file
e criar um backup do original chamado your_file.bak
.
Uma nota lateral
Por favor, não interprete mal minhas intenções nem se ofenda com isso, mas notei que você tem muitas perguntas semelhantes relacionadas ao regex / processamento de texto. Eu aconselho você a começar a aprender sed
, awk
e grep
em seu próprio país para ajudar a acelerar a sua produtividade. Novamente, não me interpretem mal, estou muito feliz em ajudar (como a maioria das pessoas por aqui); acho que você se beneficia enormemente ao escolher essas ferramentas para o seu uso diário.
Apenas para provar como as pessoas são úteis por aqui, considere a sugestão de @ slm nos comentários abaixo e sinta-se à vontade para visitar esta sala de bate-papo a qualquer momento para perguntas.
Você pode usar grep simples para isso:
fonte
-th
/-to
into-t[ho]
.grep -e
ouegrep
Usando
sed
:fonte
-th
/-to
into-t[ho]
.Usando
awk
:fonte
-th
/-to
into-t[ho]
.O questionador fez dois pontos:
As soluções, neste momento, abordam o primeiro ponto e, portanto, também o segundo. Mas suponha que o arquivo seja maior e tenha a seguinte aparência:
Não seria necessário abordar o segundo ponto do OP?
faz o trabalho de remover linhas presumivelmente indesejadas contendo apenas espaços, pontos e traços e reter o restante, seja o que for.
Eu pensaria que o risco de qualquer uma das abordagens é que a natureza do arquivo não está definida corretamente.
fonte
Usando Perl:
ou, editar no local (como
sed
,perl
também fará um backup temporário, portanto, isso não é verdade na edição no local ):Isso fará uma cópia do arquivo original chamada
filename.bak
e substituirá o arquivo original pela versão editada.fonte