2013-09-13 2 views
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" 

В этом o/p grep мне необходимо было получить global masteronGlobal masteroffGlobal greenGlobal away и поместите его в переменную. Цель: я хочу получить доступ к чему-либо, что после control.sh, и сохранить его в переменной, как это сделать.

ответ

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 
1

Что-то, чтобы вы начали:

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

где

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

Variable:

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

$ echo $a 
Global masteron Global masteroff Global green Global away 
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 

Все значения, сохраненные в массиве MATCHES начинается с индекса 0, чтобы вы могли получить к ним доступ ${MATCHES[0]}, ${MATCHES[1]}, и скоро.

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 

Выход:

Global Masteron
Global masteroff
Глобальный зеленый
Global далеко

Смежные вопросы