Como remover linhas que contenham asterisco usando o comando sed

3

Eu tenho um arquivo que contém as seguintes linhas.

**;**;**;
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**

Eu quero excluir todas as linhas que contêm os seguintes padrões usando o comando Sed.

**;**;**;
**;**;**

Por favor me ajude. Obrigado.

    
por JalT 20.02.2016 / 09:36

4 respostas

1
sed '/\*\*;\*\*;\*\*;\?/d' file
  • \*\*;\*\*;\*\*;\? : corresponde a uma string **;**;** , seguido opcionalmente por um caractere ; ;
  • d : apaga a linha.

Para editar o arquivo no lugar:

sed -i '/\*\*;\*\*;\*\*;\?/d' file
% cat file                                          :(
**;**;**;
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
% sed '/\*\*;\*\*;\*\*;\?/d' file
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
% 
    
por kos 20.02.2016 / 09:46
1

Mais genericamente, para remover qualquer linha que contenha apenas ponto e vírgula e asteriscos:

sed '/^[*;]\+$/d'

Embora não seja necessário restringir-se ao sed:

grep -Ev '^[*;]+$'
    
por glenn jackman 20.02.2016 / 14:07
0

A resposta de kos já faz o trabalho. Minha resposta apenas melhora a regex um pouco.

Usando o padrão de agrupamento \( \) e o escape .\+ , podemos dizer que ele corresponde ao grupo inteiro **; e o que quer que seja seguido. Neste exemplo estou usando

$  sed -e "s|\(\*\*;\).\+|TEST|g"  stars.txt                            
TEST
*(Eng_Sen:This is an apple)TEST
TEST
TEST
*(Eng_Sen:This is an apple)TEST
TEST

Note que o GNU sed version pode pegar qualquer caractere como separador no comando de substituição, não apenas / . Aqui eu estava usando barra vertical.

No exemplo acima, tomei a liberdade de aumentar o exemplo do OP de 3 para 6 linhas.

$ cat stars.txt                                                
**;**;**;
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
**;**;**;
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
    
por Sergiy Kolodyazhnyy 28.02.2016 / 00:14
0

Você pode usar o Vim no modo Ex:

ex -sc 'g/\*\*/d' -cx file
  1. g pesquisa global

  2. d delete

  3. x salvar e fechar

por Steven Penny 16.04.2016 / 22:16