2016-12-09 4 views
1

hat der folgende einfache Bash-Skriptmit BASH einzigen Vorkommen von Integer in Textdatei abrufen

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

#read FILE_ID <<<"$ID" 

echo $ID 

Es druckt

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

Aber alles was ich brauche ist der erste Vorkommen Integer-Wert für „Datei-ID "oder 6.
Welche Änderungen sind in meinem Skript erforderlich?

Dies ist der Inhalt von test_list.txt

libmtp version: 1.1.10 

mtp-files: Successfully connected 
Foo 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. 

Antwort

0

Statt grep Sie diesen awk Befehl zuerst id drucken nur verwenden können:

id=$(awk -F'[ \t]*:[ \t]*' '$1 == "File ID"{print $2; exit}' test_list.txt) 

echo "$id" 
6 
  • -F'[ \t]*:[ \t]*' Sätze Eingabefeld Separator als : umgeben von optionalen Leerzeichen.
  • $1 == "File ID" wird sicherstellen, dass wir unsere Suchmuster haben, bevor :
  • exit nach dem ersten Druck zu verlassen.
+1

ok das funktioniert. Vielen Dank! –

+0

Oder senden Sie einfach Ihre ursprüngliche Ausgabe über 'Kopf -1'. – gilez

Verwandte Themen