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 = СМ-G900F
  • ro.build.version.incremental = G900FXXU1BOK6

но не полный, только то, что приходит после = so SM-G900F и G900FXXU1BOK6 .

Я знаю, что это может быть сделано каким-то образом, либо с awk , либо с grep но я не знаю, как именно. большое спасибо

  • Использование текстового редактора Linux для подготовки контента для Microsoft Word
  • Как найти подстроку в командной строке?
  • Использовать вставку с основным вводом
  • строковое представление с использованием регулярного выражения (измененное)
  • Замена места для команды paste
  • Найти совпадения из индексного файла без точного соответствия и распечатать последнее поле
  • Как сортировать данные в файле с помощью скрипта?
  • Как извлечь определенные данные из потока MQTT
  • 4 Solutions collect form web for “Bash для чтения двух конкретных строк из текстового файла и использования частей из них в качестве переменной”

    С 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
    

    Используйте grep для соответствия строке и cut чтобы выбрать нужную деталь:

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

    Параметр -d = как разделитель, а параметр -f выбирает второе поле.

    Используйте команду ниже, она даст вам результат:

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

    egrep такой же, как grep -e, и используется здесь для поиска нескольких выражений в одно и то же время. Awk просто выполняет извлечение данных после «=»

    G900FXXU1BOK6

    SM-G900F

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

    Используя полевой разделитель = , напечатайте второе поле, только если первое поле соответствует шаблону регулярного выражения ^(ro.product.model|ro.build.version.incremental)$

    Linux и Unix - лучшая ОС в мире.