0

私のファイルの内容: file.conf は

sm key mappings
sm_key_7_value_0="/www/cgi-bin/scripts/app_web_mood_control.sh Global masteron;echo hello"
sm_key_7_value_1="/www/cgi-bin/scripts/app_web_mood_control.sh Global masteroff"
sm_key_8_value_0="/www/cgi-bin/scripts/app_web_mood_control.sh Global green"
sm_key_8_value_1="/www/cgi-bin/scripts/app_web_mood_control.sh Global away"
sm_key_9_value_0="/www/cgi-bin/scripts/app_usr_core_sendPulse.sh CR_D601 C1_OPN"
sm_key_9_value_1="/www/cgi-bin/scripts/app_usr_core_sendPulse.sh CR_D601 C1_CLS"
sm_key_A_value_0="/www/cgi-bin/scripts/app_oasis_irControl.sh IR_D03 AC_ON_"
sm_key_A_value_1="/www/cgi-bin/scripts/app_oasis_irControl.sh IR_D03 AC_OFF"
sm_key_B_value_0="/www/cgi-bin/scripts/app_usr_core_sendInstruction.sh CR_D601 OP_01N"
sm_key_B_value_1="/www/cgi-bin/scripts/app_usr_core_sendInstruction.sh CR_D601 OP_01F"
sm_key_C_value_0="/www/cgi-bin/scripts/app_usr_core_sendInstruction.sh CR_D601 OP_02N"
sm_key_C_value_1="echo 123 && $(sleep 5) && $(echo hello)"

grepを使用しました

 grep "/www/cgi-bin/scripts/app_web_mood_control.sh" file.conf 

grep の出力は

sm_key_7_value_0="/www/cgi-bin/scripts/app_web_mood_control.sh Global masteron;echo hello"
sm_key_7_value_1="/www/cgi-bin/scripts/app_web_mood_control.sh Global masteroff"
sm_key_8_value_0="/www/cgi-bin/scripts/app_web_mood_control.sh Global green"
sm_key_8_value_1="/www/cgi-bin/scripts/app_web_mood_control.sh Global away"

このgrepのo/pでは、アクセス global masteron Global masteroff Global green Global awayして変数に入れる必要がありました。目的は、control.shの後にあるものにアクセスし、これを達成する方法を変数に格納することです。

4

4 に答える 4

1

始めるための何か:

$ awk -F'[ ;"]' -f g.awk your_input
Global masteron
Global masteroff
Global green
Global away

どこ

$ cat g.awk
/Global/ {
    print $3, $4
}

変数:

$ a=$(awk -F'[ ;"]' -f g.awk your_input)

$ echo $a
Global masteron Global masteroff Global green Global away
于 2013-09-13T12:04:50.103 に答える
0

で使用\Kするgrep:

readarray -t found < <( grep -P -o '/www/cgi-bin/scripts/app_web_mood_control.sh \K[^;"]*' file.conf)

for curFound in "${found[@]}"; do
    echo "$curFound"
done

出力:

グローバルマスターオン グローバルマスターオフ
グローバル
グリーン
グローバルアウェイ

于 2013-09-13T13:18:18.337 に答える
0
var=$(grep -Po '(?<=/www/cgi-bin/scripts/app_web_mood_control\.sh )[^;"]*' file.conf)

テスト:

kent$  a=$(grep -Po '(?<=/www/cgi-bin/scripts/app_web_mood_control\.sh )[^;"]*' f)

kent$  echo $a
Global masteron
Global masteroff
Global green
Global away
于 2013-09-13T12:04:16.430 に答える
0

あなたは使用することができreadarrayますsed

#!/bin/bash

FILE='file.conf'

# Get values.
readarray -t MATCHES < <(sed -n '/app_web_mood_control.sh/{ s|.*app_web_mood_control.sh ||; s|;.*$||; s|\"||; p; }' "$FILE")

# Demonstrate the values.
for A in "${MATCHES[@]}"; do
    echo "$A"
done

出力例:

Global masteron
Global masteroff
Global green
Global away

配列に保存されたすべての値はインデックス 0 から始まるため、 、 などでMATCHESアクセスできます。${MATCHES[0]}${MATCHES[1]}

于 2013-09-13T12:07:13.503 に答える