我有以下简单的 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
选项。