Então eu tenho que fazer um grep ou sed?

0

Acabamos de fazer uma pergunta sobre grep . Eu tenho um arquivo de texto com muitas entradas e só quero um certo número impresso. Este é o meu texto e eu quero que o 700 seja impresso ...

Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid:
    
por peter 23.02.2018 / 08:44

2 respostas

3

Como o arquivo tem uma estrutura simples com registros facilmente distinguíveis, e você quer o valor em um desses, pode ser mais fácil usar awk :

awk '/^Mødt ind:/ { print $NF }' file

O /^Mødt ind:/ significa que o seguinte bloco será acionado para cada linha que começa com o texto Mødt ind: . O bloco imprime $NF , que é o valor do último campo na linha ( NF é o número do campo do último campo e colocar $ na frente dele fornece o valor desse campo). / p>

Com o padrão sed :

sed -n 's/^Mødt ind: \(.*\)//p' file

Isso faz a mesma correspondência da linha como awk , mas substitui o conteúdo da linha pelo que vem depois do cólon e do espaço. A saída normal é desativada com -n e somente as linhas modificadas pela expressão são produzidas.

Eu ainda preferiria a solução awk , pois ela é mais legível e mais fácil de entender / modificar.

    
por 23.02.2018 / 08:48
0

sed sozinho pode lidar com isso, como você já adivinhou:

sed 's/.*ind:\ \(.*\)//;tx;d;:x'

É uma operação de pesquisa e substituição:

.*ind:\ \(.*\) procura linhas iniciadas por qualquer caractere, seguidas por ind: (o espaço é escapado). O \(.*\) é usado para "corresponder" ao restante da linha e armazenado na primeira correspondência, pela qual toda a linha é substituída por: . O ;tx;d;:x funciona assim: tx ramifica para rotular x se a substituição foi bem-sucedida, d exclui linha, :x é um marcador para o rótulo x.

    
por 23.02.2018 / 09:04

Tags