텍스트 파일에서 처음으로 나타나는 정수 검색

텍스트 파일에서 처음으로 나타나는 정수 검색

다음과 같은 간단한 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

특정 라인에 하나의 정수만 나타나면 해당 라인으로의 파이프 연결은 head중복됩니다.

편집된 질문에서 알 수 있듯이 "파일 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

Use egrep -m1, GNU Grep을 사용하는 것 같으니 -m옵션이 있습니다.

관련 정보