Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 替换正则表达式匹配项_Bash_Unix_Shell - Fatal编程技术网

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',”
您不能在等号后面有空格,您需要引用或转义该值。当然,您需要使用相同的变量名才能访问其值。(^:第一个答案不好,因为它不会删除空格。第二个答案很好。你是第一个回答的人,所以我接受你的答案非常感谢!