다음과 같은 간단한 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
옵션이 있습니다.