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*
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?
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}'
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.