检索文本文件中第一次出现的整数

检索文本文件中第一次出现的整数

我有以下简单的 bash 脚本

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

#read FILE_ID <<<"$ID"

echo $ID

它打印出来

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

但我所需要的只是第一次出现“文件 ID”或 6 的整数值。
我的脚本中需要进行哪些更改?

这是加载的文本文件

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.

答案1

要从文件中提取第一个整数,即使该行出现多个整数:

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

如果任一给定行上只出现一个整数,则管道 intohead是多余的。

如果您正在搜索,正如您编辑问题所暗示的那样,对于每个唯一出现的“文件 ID:”:

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

为了获得唯一的数字 ID,Rube Goldberg 方法可以是:

egrep '^File Id:  [0-9]+' /path/to/inputfile | sort | uniq | egrep -o '[0-9]+'

答案2

#!/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

答案3

使用egrep -m1,我猜你使用 GNU Grep 所以它有-m选项。

相关内容