Script Bash para ler duas linhas específicas do arquivo de texto e usar partes delas como variável

1

Então eu tenho um arquivo de texto que se parece com isso

# 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
....

O que eu quero são as linhas

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

mas não concluído, apenas o que vem depois de = , então SM-G900F e G900FXXU1BOK6 .

Eu sei que isso pode ser feito de alguma forma, seja com awk ou grep , mas não sei exatamente como. Muito obrigado

    
por chris 28.02.2016 / 10:27

4 respostas

1

Com o GNU sed:

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

ou

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

Saída:

G900FXXU1BOK6
SM-G900F

ou com a atual bash GNU:

#!/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"

Saída:

SM-G900F
G900FXXU1BOK6
    
por 28.02.2016 / 10:41
1

Use grep para corresponder à linha e cut para selecionar a parte desejada:

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

A opção -d define = como separador e a opção -f seleciona o segundo campo.

    
por 28.02.2016 / 10:40
0

Use o comando abaixo para obter o resultado:

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

egrep é o mesmo que grep -e e é usado aqui para pesquisar várias expressões ao mesmo tempo. Awk está apenas fazendo a extração dos dados depois de "="

G900FXXU1BOK6

SM-G900F

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

Usando um delimitador de campo de = , imprima o segundo campo apenas se o primeiro campo corresponder ao padrão de expressão regular ^(ro.product.model|ro.build.version.incremental)$

    
por 29.02.2016 / 01:06