Osc*_*rro 3 regex bash substitution
给定一个包含以下字符串的 bash 变量:
INPUT="Cookie: cf_clearance=foo; __cfduid=bar;"
Run Code Online (Sandbox Code Playgroud)
为什么替换会${INPUT/cf_clearance=[^;]*;/}产生输出:Cookie: 而不是我所期望的:Cookie: __cfduid=bar;
在在线正则表达式验证器中测试相同的正则表达式确认cf_clearance=[^;]*;应该cf_clearance=foo;只匹配,而不是字符串的其余部分。
我在这里做错了什么?
使用实际的正则表达式匹配功能而不是参数扩展,后者适用于模式。
[[ $INPUT =~ (.*)(cf_clearance=[^;]*;)(.*) ]]
ans=${BASH_REMATCH[1]}${BASH_REMATCH[3]}
Run Code Online (Sandbox Code Playgroud)
您还可以使用扩展模式,它相当于一个强大的正则表达式:
shopt -s extglob
$ echo "${INPUT/cf_clearance=*([^;]);/}"
Run Code Online (Sandbox Code Playgroud)