所以我得到了一个如下所示的文本文件
# 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
=
但不完整,只有soSM-G900F
和之后的内容G900FXXU1BOK6
。
我知道这可以通过某种方式完成,可以使用awk
或 ,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)$