使用BASH检索文本文件

时间:2016-12-09 17:03:05

标签: regex bash

拥有以下简单的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

但我需要的是&#34;文件ID&#34;的第一个出现的整数值。或6.
我的脚本需要进行哪些更改?

这是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.

1 个答案:

答案 0 :(得分:0)

您可以使用此grep命令仅打印第一个ID,而不是awk

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

echo "$id"
6
  • -F'[ \t]*:[ \t]*'将输入字段分隔符设置为:,并由可选空格包围。
  • $1 == "File ID"将确保我们在:
  • 之前拥有搜索模式
  • exit在首次打印后退出。