标识紧随字母/字母数字单词的“ $”

时间:2019-06-28 19:56:53

标签: bash shell

“ $”不应紧跟数字[0-9]。它应该只显示 输出-“ $”,后面紧跟字母/字母数字/字母字符。

输入:dirname $0/../bin/$12JAVA_INV/$FILE12NAME

输出:$FILE12NAME

grep -o '[$][a-zA-z_]*'

使用此方法,我收到的输出为:$ $ $FILENAME

2 个答案:

答案 0 :(得分:1)

您得到的结果是$,因为*的意思是匹配或更多个前面的模式。 $0之所以匹配,是因为它有一个$,后跟0个字母。 如果您至少需要1个字母,请改用+,表示一个或更多。

但是,如果您希望能够匹配$FILE12NAME,则还需要在第一个字符后允许数字。因此使用:

grep -i -o '\$[a-z_][a-z_0-9]*'

此匹配$,后跟字母或下划线,后跟零个或多个字母,下划线或数字。

答案 1 :(得分:0)

看起来像你想要的

$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | awk '{print $NF}' FS=/
$FILE12NAME

但是,如果您真的想按照描述的方式解析它,则可以执行以下任一操作:

$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | sed -e 's/.*\(\$[^0-9]\)/\1/'
$FILE12NAME
$ echo 'dirname $0/../bin/$12JAVA_INV/$FILE12NAME' | sed -E 's/.*(\$[^0-9])/\1/'
$FILE12NAME