Bash 识别$&引用;紧跟其后的是字母/字母数字单词
“$”后面不应紧跟数字[0-9]。它应该只显示 输出-“$”后面紧跟着一个标签/字母数字/字母字符 输入:Bash 识别$&引用;紧跟其后的是字母/字母数字单词,bash,shell,Bash,Shell,“$”后面不应紧跟数字[0-9]。它应该只显示 输出-“$”后面紧跟着一个标签/字母数字/字母字符 输入:dirname$0/./bin/$12JAVA\u INV/$FILE12NAME grep -o '[$][a-zA-z_]*' 输出:$FILE12NAME grep -o '[$][a-zA-z_]*' 使用此命令,我将收到一个输出:$$$FILENAME您将在结果中获得$,因为*意味着匹配零个或多个前面的模式$0匹配,因为它有一个$后跟0个字母。 grep -o '[$][a-z
dirname$0/./bin/$12JAVA\u INV/$FILE12NAME
grep -o '[$][a-zA-z_]*'
输出:$FILE12NAME
grep -o '[$][a-zA-z_]*'
使用此命令,我将收到一个输出:
$$$FILENAME
您将在结果中获得$
,因为*
意味着匹配零个或多个前面的模式<代码>$0匹配,因为它有一个$
后跟0个字母。
grep -o '[$][a-zA-z_]*'
如果您至少需要一个字母,请使用+
,它表示一个或多个字母
但是,如果希望能够匹配$FILE12NAME
,还需要在第一个字符后允许数字。因此,请使用:
grep -i -o '\$[a-z_][a-z_0-9]*'
这与
$
匹配,后跟字母或下划线,后跟零个或多个字母、下划线或数字。看起来您需要:
$ 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
@Cyrus我同意你的观点,我在这里分享了部分代码。更好的是:
'\$[:alpha:][:alnum:][:unum:][ucode>(-I
是不需要的,它在任何语言环境下都能工作)。谢谢你的回答,你能描述一下吗?