Eu usei a resposta do Phoshi , assistida por Dennis Williamson , para me ajudar a criar sed /^\s+-\s.*/d
, que funciona como esperado.
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
Eu usei a resposta do Phoshi , assistida por Dennis Williamson , para me ajudar a criar sed /^\s+-\s.*/d
, que funciona como esperado.
"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.
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.
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'
.