我无法在我的bash脚本中将我的测试正则表达式应用于分组。在变量中使用分组应用正则表达式的正确bash语法是什么?
我用正则表达式测试器测试了我的正则表达式并且工作了。但是我仍然无法用bash来解决这个问题。现在我或多或少了解正则表达式如何工作,但我仍然需要知道这在脚本中是如何应用的。
read_line="1- https://www.youtube.com/watch?time_continue=4&v=wgG6xlQ1jx8 ==> movie name 1"
url=[[ "$read_line" =~ \d.*?(https.*?)==]] && echo "${BASH_REMATCH[1]}" #This syntax I copied from here.
folder_name=[[ "$read_line" =~ ==>\s+(\w+.*) ]] && echo "${BASH_REMATCH[1]}"
实际结果应该是:
url : https://www.youtube.com/watch?time_continue=4&v=wgG6xlQ1jx8
folder_name: movie name 1
尝试:
$ [[ "$read_line" =~ [0-9].*(https.*)== ]] && echo "${BASH_REMATCH[1]}"
https://www.youtube.com/watch?time_continue=4&v=wgG6xlQ1jx8
$ [[ "$read_line" =~ '==>'[[:space:]]+([[:alnum:]].*) ]] && echo "${BASH_REMATCH[1]}"
movie name 1
\d
或\w
等字符类。 Bash使用POSIX正则表达式。[[ ... ]]
设置错误代码但不返回字符串。因此,诸如var=[[ ... ]]
之类的变量赋值是没有用的。[[
和]]
时,空间很重要。注意这失败了:
$ [[ 1=1]] && echo yes
bash: conditional binary operator expected
bash: syntax error near `yes'
但这成功了:
$ [[ 1 = 1 ]] && echo yes
yes
.*?
。if [[ "$read_line" =~ '==>'[[:space:]]+([[:alnum:]].*) ]]
then
folder_name="${BASH_REMATCH[1]}"
else
echo "No Match"
fi
原始的bash代码,
url = [[“$ read_line”=〜\ d。?(https.?)==]] && echo“$ {BASH_REMATCH [1]}”
folder_name = [[“$ read_line”=〜==> \ s +(\ w +。*)]] && echo“$ {BASH_REMATCH [1]}
包含bash正则表达式的错误;
- [[ ]]
正则表达式并不意味着RHS或表达中的正确值,所以它会出错
- 它没有速记功能;由bash正则表达式支持的\w, \d, \s
等必须执行[A-Za-z_],[0-9],[]等但是......
- 幸运的是它支持POSIX类集\w by [[:alnum:]] \d by [[:digit:]] \s by [[:space:]]
等,请参阅其手册
- 它没有'懒惰'量词特征?
跟随重复运算符*
或+
- 里面的正则表达式占位符[[ ]]
,一些bash特殊字符仍然适用于此类
\ > |
必须作为\\ \> \|
和关系运营商== <=
等逃脱
建议: 获取/安装更好的正则表达式引擎即。更好的编程语言,内置更好的正则表达式功能来完成这些工作。从qazxsw poi等内部做到
为了获得目标,bash脚本可能是;
sed, perl, awk