从文本中获取值并将其分配给变量

时间:2018-12-25 21:16:07

标签: shell text awk cat

我正在研究从系统文件中读取电池信息的脚本。 我只需要从MAX_IBAT(mA)行获取电池总容量(3000):3000;并将其放入变量中。 这是我正在读取的文件的内容:

event.returnValue = true;

我尝试过的事情:

charging_source: NONE;
charging_enabled: 0;
overload: 0;
Percentage(%): 50;
Percentage_raw(%): 50;
gs_cable_impedance: 0
gs_R_cable_impedance: 0
gs_aicl_result: 0
batt_cycle_first_use: 2017/01/01/12:00:06
batt_cycle_level_raw: 26157;
batt_cycle_overheat(s): 0;
htc_extension: 0x0;
usb_overheat_state: 0;
USB_PWR_TEMP(degree): 304;
ISEN_VALUE_ADC: 228;
ISEN_VALUE: 0;
SOC(%): 27;
VBAT(mV): 3707;
IBAT(mA): 383;
IUSB(mA): 0;
MAX_IBAT(mA): 3000;
MAX_IUSB(mA): 0;
AICL_RESULT: 0
VBUS(uV): 0;
BATT_TEMP: 320;
HEALTH: 1;
BATT_PRESENT(bool): 1;
CHARGE_TYPE: 1;
CHARGE_DONE: 0;
USB_PRESENT: 0;
USB_ONLINE: 0;
CHARGER_TEMP: -1;
CHARGER_TEMP_MAX: 803;
CC_uAh: 889648;
USB_CMD_IL_REG: 0x00;
USBIN_CURRENT_LIMIT_CFG: 0x14;
USBIN_AICL_OPTIONS_CFG: 0xc4;
FAST_CHARGE_CURRENT_CFG: 0x78;
FG_BCL_LMH_STS1: 0x00;

2 个答案:

答案 0 :(得分:1)

这使用“:”和“;”作为字段分隔符:

max_ibat=$(awk -F ': |;' '$1=="MAX_IBAT(mA)" {print $2}' file)
echo "$max_ibat"

输出:

3000

答案 1 :(得分:1)

grep 解决方案:

  • -o打印确切的输出而不是整行
  • -P perl模式
  • (?<=MAX_IBAT\(mA\):\s)在断言后面查找,以仅打印以字符串'MAX_IBAT(mA):'
  • 开头的数字

命令:

max_ibat=$(grep -oP '(?<=MAX_IBAT\(mA\):\s)\d+' Input_file)
echo "$max_ibat"

输出:

3000

sed 解决方案:

  • -n静默模式->默认情况下不打印
  • /^MAX_IBAT(mA):/仅处理以MAX_IBAT(mA):开头的行
  • /s/[^0-9]//gp用数字替换所有不是数字的字符(删除它们),然后用p打印。

命令:

max_ibat=$(sed -n '/^MAX_IBAT(mA):/s/[^0-9]//gp' Input_file)
echo "$max_ibat"

输出:

3000