recupera a primeira ocorrência do inteiro no arquivo de texto

1

Eu tenho o seguinte script bash simples

#!/bin/bash
mtp-files > test_list.txt
echo "Hello World"
ID="$(cat test_list.txt | egrep '^(File) ID: ')"

#read FILE_ID <<<"$ID"

echo $ID

Imprime

File ID: 6 File ID: 6 File ID: 6

Mas tudo que preciso é a primeira ocorrência de um valor inteiro para "ID do arquivo" ou 6.
Quais mudanças são necessárias no meu script?

Este é o arquivo de texto que é carregado

libmtp version: 1.1.10

mtp-files: Successfully connected
Android device detected, assigning default bug flags
Listing File Information on Device with name: Foo Device
File ID: 6
   Filename: 20161208_155851.jpg
   File size 658911 (0x00000000000A0DDF) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 6
   Filename: 20161208_155851.jpg
   File size 658911 (0x00000000000A0DDF) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
File ID: 6
   Filename: 20161208_155851.jpg
   File size 658911 (0x00000000000A0DDF) bytes
   Parent ID: 2
   Storage ID: 0x00010001
   Filetype: JPEG file
OK.
    
por Bachalo 09.12.2016 / 18:04

3 respostas

2

Para extrair o primeiro inteiro de um arquivo, mesmo se mais de um ocorrer na linha:

egrep -m1 -o '[0-9]+' /path/to/inputfile | head -n1

Se apenas um inteiro aparecer em qualquer linha, o pipe em head é supérfluo.

Se você estiver pesquisando, como você editou sua pergunta, para cada ocorrência única de "ID do arquivo:":

egrep '^FILE ID: [0-9]+' /path/to/inputfile | sort | uniq

Para obter apenas os IDs numéricos exclusivos, o caminho de Rube Goldberg poderia ser:

egrep '^File Id:  [0-9]+' /path/to/inputfile | sort | uniq | egrep -o '[0-9]+'
    
por 09.12.2016 / 18:11
1
#!/bin/bash
mtp-files > test_list.txt
echo "Hello World"
#retrieve only the first ID value
ID=$(awk '/File ID:/{print $NF;exit}' test_list.txt) 
echo $ID
    
por 09.12.2016 / 18:11
1

Use egrep -m1 , eu acho que você usa o GNU Grep, então ele tem a opção -m .

    
por 09.12.2016 / 18:12