“ $”不应紧跟数字[0-9]。它应该只显示 输出-“ $”,后面紧跟字母/字母数字/字母字符。
输入:dirname $0/../bin/$12JAVA_INV/$FILE12NAME
输出:$FILE12NAME
grep -o '[$][a-zA-z_]*'
使用此方法,我收到的输出为:$ $ $FILENAME
答案 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