Como extrair o número da string abaixo, que é a saída de um comando?

0

Eu quero extrair o número da mensagem que recebemos executando o comando mailx -H . Eu quero apenas os números de mensagem de mensagens não lidas e novas. Eu tentei com o comando abaixo:

mailx -H|grep '^ [UN]'|cut -c 3-

Mas não está dando a saída necessária. Ele dá a linha inteira seguindo U ou N. A saída de amostra do comando mailx -H é:

O 95 abcd Thu Sep  6 20:29   25/1245  Incident: 00291
O 96 efgh Thu Sep  6 20:29   25/1245  Incident: 00291
O 97 abcd  Thu Sep  6 20:29   25/1245 Incident: 00291
O 98 pqrs Thu Sep  6 20:29   25/1245  Incident: 00291
O 99 abcd  Thu Sep  6 20:29   25/1245 Incident: 00291
U100 cnhn Thu Sep  6 20:29   25/1244  Incident: 00291
U101 gont Thu Sep  6 20:29   25/1244  Incident: 00291
U102 qwer Thu Sep  6 20:29   25/1244  Incident: 00291

Eu quero o número que segue U ou N, isto é, mensagens novas ou não lidas e mensagens O (antigas). Como isso pode ser feito em um script de shell? A saída esperada é

95
96
97
98
99
100
101
102
    
por Devjith 06.09.2018 / 13:10

2 respostas

2

Tente isso,

mailx -H | nawk -F '[^0-9]+' '/^ [U|N]/ { print $2}' 
  • [^0-9]+ como um FS.
  • extrai as linhas que começaram com U ou N
  • imprime o segundo campo
por 06.09.2018 / 13:51
1

Experimente este grep :

grep -P -o '(?<=O|U|N) ?[0-9]+'

Exemplo:

echo "O 95 abcd Thu Sep  6 20:29   25/1245  Incident: 00291
O 96 efgh Thu Sep  6 20:29   25/1245  Incident: 00291
O 97 abcd  Thu Sep  6 20:29   25/1245 Incident: 00291
O 98 pqrs Thu Sep  6 20:29   25/1245  Incident: 00291
O 99 abcd  Thu Sep  6 20:29   25/1245 Incident: 00291
U100 cnhn Thu Sep  6 20:29   25/1244  Incident: 00291
U101 gont Thu Sep  6 20:29   25/1244  Incident: 00291
U102 qwer Thu Sep  6 20:29   25/1244  Incident: 00291" | grep -P -o '(?<=O|U|N) ?[0-9]+'
 95
 96
 97
 98
 99
100
101
102

-

grep --version
grep (GNU grep) 2.27

Se o grep acima não funcionar / é suficiente, tente este sed :

sed -E 's/^(O|U|N) ?([0-9]+) .*//g'

Exemplo:

echo "O 95 abcd Thu Sep  6 20:29   25/1245  Incident: 00291
O 96 efgh Thu Sep  6 20:29   25/1245  Incident: 00291
O 97 abcd  Thu Sep  6 20:29   25/1245 Incident: 00291
O 98 pqrs Thu Sep  6 20:29   25/1245  Incident: 00291
O 99 abcd  Thu Sep  6 20:29   25/1245 Incident: 00291
U100 cnhn Thu Sep  6 20:29   25/1244  Incident: 00291
U101 gont Thu Sep  6 20:29   25/1244  Incident: 00291
U102 qwer Thu Sep  6 20:29   25/1244  Incident: 00291" | sed -E 's/^(O|U|N) ?([0-9]+) .*//g'
95
96
97
98
99
100
101
102
    
por 06.09.2018 / 13:15