Bash 스크립트는 텍스트 파일에서 두 개의 특정 줄을 읽고 그 중 일부를 변수로 사용합니다.

Bash 스크립트는 텍스트 파일에서 두 개의 특정 줄을 읽고 그 중 일부를 변수로 사용합니다.

그래서 다음과 같은 텍스트 파일을 얻었습니다.

# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=LRX21T
ro.build.version.incremental=G900FXXU1BOK6
ro.build.version.sdk=21
ro.build.version.codename=REL
ro.build.version.all_codenames=REL
ro.build.version.release=5.0
ro.build.version.security_patch=2015-11-01
ro.build.version.base_os=
ro.build.date=Mon Nov 23 14:29:35 KST 2015
ro.build.date.utc=1448256575
ro.build.type=user
ro.build.user=dpi
ro.build.host=SWHD4408
ro.build.tags=release-keys
ro.product.model=SM-G900F
ro.product.brand=samsung
ro.product.name=kltexx
ro.product.device=klte
ro.product.board=MSM8974
# ro.product.cpu.abi and ro.product.cpu.abi2 are obsolete,
# use ro.product.cpu.abilist instead.
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi
ro.product.cpu.abilist=armeabi-v7a,armeabi
ro.product.cpu.abilist32=armeabi-v7a,armeabi
ro.product.cpu.abilist64=
ro.product.manufacturer=samsung
....

내가 원하는 건 선

  • ro.product.model=SM-G900F
  • ro.build.version.incremental=G900FXXU1BOK6

=그러나 그것은 완전하지 않습니다. 오직 SM-G900F그렇습니다 G900FXXU1BOK6.

awkor 를 사용하여 어떤 방식으로든 이 작업을 수행할 수 있다는 것을 알고 있지만 grep정확한 방법은 모르겠습니다. 감사합니다

답변1

GNU sed 사용:

sed -n 's/^ro.product.model=//p;s/^ro.build.version.incremental=//p' file

또는

sed -nr 's/^(ro.product.model|ro.build.version.incremental)=//p' file

산출:

G900FXXU1BOK6
SM-G900F

또는 현재 GNU bash를 사용하십시오.

#!/bin/bash

while read -r line; do
  [[ $line =~ ^(ro.product.model=) ]] && r="${line#*${BASH_REMATCH[1]}}"$'\n'"$r"
  [[ $line =~ ^(ro.build.version.incremental=) ]] && r="${line#*${BASH_REMATCH[1]}}"
done < file
echo "$r"

산출:

SM-G900F
G900FXXU1BOK6

답변2

grep라인을 일치시키고 cut원하는 부분을 선택하려면 :

grep ro.product.model input.txt |cut -d= -f2

-d옵션은 =구분 기호를 설정하고, 이 -f옵션은 두 번째 필드를 선택합니다.

답변3

다음 명령을 사용하면 결과가 표시됩니다.

egrep 'ro.product.model|ro.build.version.incremental' a.txt | awk -F'=' '{print $2}'

egrep은 여러 표현식을 동시에 검색하는 데 사용되는 grep -e와 동일합니다. awk는 "=" 이후의 데이터를 추출합니다.

G900FXXU1BOK6

SM-G900F

답변4

awk -F= '$1 ~ /^(ro.product.model|ro.build.version.incremental)$/ { print $2 }' 

필드 구분 기호를 사용하면 =첫 번째 필드가 정규식 패턴과 일치하는 경우에만 두 번째 필드가 인쇄됩니다.^(ro.product.model|ro.build.version.incremental)$

관련 정보