usando sed para remover linhas em um arquivo

1

Eu tenho um arquivo parecido com isto:

Heading - 
  - Completed foo
    - More information
    - Still more
  * Need to complete bar
  - Did baz (comment blah blah) ***

Another - 
  * Need to complete foo
  - Completed bar (blah comment blah) ***
  - Done baz

Eu preciso executar o arquivo de texto através de sed para remover todas as linhas que começam com espaços (o número varia) e um hífen e outro espaço.

Qual é o regex ou padrão que preciso usar com sed para fazer com que a saída fique assim abaixo?

Heading - 
  * Need to complete bar

Another - 
  * Need to complete foo
    
por eleven81 06.11.2009 / 16:59

4 respostas

3

Eu usei a resposta do Phoshi , assistida por Dennis Williamson , para me ajudar a criar sed /^\s+-\s.*/d , que funciona como esperado.

    
por 06.11.2009 / 17:09
2

"s/\s*-\s.*//g" deve fazer isso, eu acho.

Isso é para corresponder um espaço, * para corresponder a zero ou mais do caractere precedente (o espaço), um caractere de hífen literal, depois outro espaço, e depois. + para corresponder a tudo depois disso.

    
por 06.11.2009 / 17:01
1

Você deve usar egrep ou grep para essa tarefa, sed é um editor de fluxo, grep está mais alinhado com a filosofia de linha por vez.

Você precisa de uma expressão regular que corresponda ao início da linha, espaço em branco, hífen e espaço. Parece que isso funcionaria:

egrep  -v  '^[ ]+-[ ]' filename

A opção -v faz com que egrep REMOVE as linhas correspondentes - isso é mais fácil do que criar um regex que rejeita as linhas.

Exemplo:

 nobody$ egrep -v  '^[ ]+-[ ]' /tmp/foof
 Heading - 
   * Need to complete bar

 Another - 
   * Need to complete foo
 nobody$ cat /tmp/foof
 Heading - 
   - Completed foo
     - More information
     - Still more
   * Need to complete bar
   - Did baz (comment blah blah) ***

 Another - 
   * Need to complete foo
   - Completed bar (blah comment blah) ***
   - Done baz
 nobody$ _

Lidar com os caracteres de tabulação significa que você precisa deles nas expressões de colchetes, mas isso é difícil de mostrar on-line.

    
por 06.11.2009 / 18:26
0

Para filtrar linhas inteiras da saída, você geralmente deseja grep , não sed . Em particular, para excluir linhas específicas, você vai querer usar grep -v 'exclusion-regex' .

    
por 06.11.2009 / 18:12

Tags