0

我一直在尝试找到一个有效的正则表达式来仅过滤掉 shell 脚本中的变量,但无法过滤。我不是在谈论实际变量,而是在谈论创建它的字符串。作为一个例子,我一直试图egrep从这个脚本中取出变量。

#!/bin/bash

flavor=${1:-dzen2}

function gmail() {
while true
do
    inbox_count=$(wget -q -O- --auth-no-challenge --user=something@gmail.com --password=something 'https://mail.goog$
    echo "Gg:$inbox_count"
    sleep 60
done
}

function weather() {
while true
do
    weather_stat=$($HOME/.config/i3/./weather.sh)
    echo "F$weather_stat"
    sleep 900
done
}

function time_date() {
while true
do
    klocka=$(date +'%A den %d %B v%V  %H:%M')
    echo "S$klocka"
    sleep 10
done < <(echo)
}

bspc control --put-status
xtitle -sf "T%s" > "$PANEL_FIFO" &
weather > "$PANEL_FIFO" &
gmail > "$PANEL_FIFO" &
time_date > "$PANEL_FIFO" &
case "$flavor" in
bar)
    cat "$PANEL_FIFO" | .config/bspwm/panel_bar | bar
;;
dzen2)
    . .config/bspwm/panel_colors
    PANEL_HEIGHT=14
    FONT_FAMILY='Dejavu Sans'
    FONT_SIZE=9
    cat "$PANEL_FIFO" | .config/bspwm/panel_dzen2 -f "$FONT_FAMILY" -s "$FONT_SIZE" | \
    dzen2 -h $PANEL_HEIGHT -dock -ta l -title-name panel -fn "${FONT_FAMILY}:pixelsize=${FONT_SIZE}" \
    -fg "$COLOR_FOREGROUND" -bg "$COLOR_BACKGROUND"
;;
esac

我的 Nano 着色主题需要这个。到目前为止,我一直在使用 "^[A-Za-z0-9 ].*="which 获得一些但不是所有的变量。如果我做类似"[A-Za-z0-9 ].*="的事情需要很多。我认为可能是其他变量,例如klocka=以制表开头..但未能成功解决它。

我希望它过滤掉等号之前的变量。像这样FONT_SIZE=,我可以在 Nano 中主题化该部分。我需要正则表达式而不是 sed 或 awk,因为那是 Nano 中的语法。

4

2 回答 2

2

好吧,像这样的简单正则表达式似乎对我有用:

^\s*(\w*)=

它捕获变量名称。请注意,只要您有在同一行上定义多个变量的脚本,这将不起作用。

示例:http ://www.regex101.com/r/sE8zN8

于 2013-07-26T13:06:16.850 回答
1

尝试这个:

^\s*[A-Za-z_][A-Za-z0-9_]*=

这允许在行首使用任意空格,后跟有效标识符(字母或下划线后跟任意数量的字母、数字和下划线),紧跟等号

这仍然会允许某些命令调用在命令前加上临时环境修改,但阻止那些超出了易于编写的正则表达式的范围:

FOO=3 BAR=5 myCommand arg1 arg2
于 2013-07-26T13:07:04.840 回答