Exclui uma parte de uma linha com sed?

1

Eu tenho a próxima saída:

Date Time: June 22 12:40:00

Product User Host IP

Software User User *.***.***.***
Software1 User User *.***.***.***

Eu tentei algumas funções com sed e awk , mas não está funcionando; Eu quero que o texto fique no caminho seguinte:

Date Time: June 22 12:40:00

Product User Host

Software User User 
Software1 User User

Eu tenho o próximo comando:

$ cat Mathematica_06-* | \
  grep -w -A 4 -B 5 "AER8\|User\|User1\|User2\|User3\|User4\|User5\|User6\|User7\|User7\|User8\|User9\|User10\|User11\|User11\|User12\|User13\|User14\|User15\|User16\|User17\|User18\|User19" | \
  awk '{print $1,$3,$4,$5,$7}' | \
  egrep -v
    > Output.log

Eu tentei adicionar no final egrep -v "|IP" , mas se eu colocar a linha nesse comando, obtive a próxima saída:

Date Time: June 22 12:40:00

Softare User User 
Software User User

Existe alguma outra maneira de excluir as partes "IP" e "*" sem afetar o restante da linha?

    
por Mareyes 26.07.2018 / 23:29

3 respostas

3

Usando sed

sed -i -e 's/\*.*//g' -e 's/ IP//g' -e '\$^Syntax.*$d' File*

Isso também deve funcionar:

awk '/Date/{print $0} /^Product|^Soft/{print $1" "$2" "$3} /^$/' File*
    
por 26.07.2018 / 23:35
3

Aqui está uma maneira com awk . A variável NR representa o número do registro; apenas imprimi-lo se for o primeiro. awk conta campos de um, então você está dizendo que deseja apenas os três primeiros seguintes:

awk 'NR==1 {print;next};{print $1,$2,$3}' 
    
por 26.07.2018 / 23:39
1

Usando sed para excluir a última palavra e quaisquer espaços ou tabulações antes dela nas linhas 5 e seguintes:

$ sed -E '5,$s/[[:blank:]]*[^[:blank:]]+$//' file
Date Time: June 22 12:40:00

Product User Host IP

Software User User
Software1 User User

O 5,$ endereça todas as linhas da linha 5 em diante, e a substituição que atua nessas linhas removerá qualquer número de espaços ou tabulações seguido por algo que é composto de não-espaços e não-guias no final de a linha.

    
por 10.08.2018 / 08:07