Bash 替换正则表达式匹配项
我有这样一个字符串:Bash 替换正则表达式匹配项,bash,unix,shell,Bash,Unix,Shell,我有这样一个字符串:'MDP_44'=>'sddsd433khjjk', 我想运行一个只返回:MDP\u 44的函数 我试过这样的方法: $ variable= 'MDP_44' => 'sdDSD4343khjkjhkjhjk', $ echo ${var1//[^A-Z]} // MDPDSD 但结果并不好 有人能帮我得到结果吗?非常感谢 var="'MDP_44' => 'sdDSD4343khjkjhkjhjk'," echo $var | cut -d=
'MDP_44'=>'sddsd433khjjk',
我想运行一个只返回:MDP\u 44
的函数
我试过这样的方法:
$ variable= 'MDP_44' => 'sdDSD4343khjkjhkjhjk',
$ echo ${var1//[^A-Z]} // MDPDSD
但结果并不好
有人能帮我得到结果吗?非常感谢
var="'MDP_44' => 'sdDSD4343khjkjhkjhjk',"
echo $var | cut -d= -f1 | sed "s/'//g"
编辑
甚至更短
echo $var | cut -d\' -f2
这将提取
'
..'
echo "$variable" | cut -d\' -f2
如果变量为:
variable="'MDP_44' => 'sdDSD4343khjkjhkjhjk',"
然后可以使用bash扩展模式匹配:
echo ${variable//?(\'| =>*)}
注意:您需要通过
shopt-s extglob
启用extglob,默认情况下,它是在交互模式下启用的。尝试从=>
开始删除所有内容
echo "${variable%%=>*}"
使用bash正则表达式查找第一组单引号之间的文本
if [[ "$variable" =~ [\']([^\']+) ]]; then match=${BASH_REMATCH[1]}; fi
我认为您的变量定义语法不正确。@Mu Qiao:是的,您是对的,它是
variable=“'MDP_44'=>'sddsd433khjjk',”
您不能在等号后面有空格,您需要引用或转义该值。当然,您需要使用相同的变量名才能访问其值。(^:第一个答案不好,因为它不会删除空格。第二个答案很好。你是第一个回答的人,所以我接受你的答案非常感谢!