Bash Perl 多行匹配到变量中

Bash Perl 多行匹配到变量中

我正在尝试从多行文本中提取 2 个字符串。

postmsg="\033[0;37m
Email 
Settings"

该行在字符串的开头找到一些匹配项并将其放入变量 inCol 中。

inCol=$(perl -e 'print $1 if $ARGV[0]=~/^(\\033\[.*?m).*$/mi; ' -- "${postmsg}")

我还想获取我尝试过的字符串的其余部分(基本上是 .*$):

inVal=$(perl -e 'print $1 if $ARGV[0]=~/^\\033\[.*?m(.*)$/mi; ' -- "${postmsg}")

如果我的输入是一行字符串,这实际上是有效的。如果没有,那么什么也不会产生。

.*$匹配到行尾...尝试过\Z但没有任何结果。单独尝试过.*,但一无所获。

尝试使用各种修饰符等...这一定很简单,但我找不到答案。

如果这可以在一行中完成,那就更好了。而不是运行两次比赛。

答案1

bash

inCol=${postmsg%%$'\n'*}
inVal=${postmsg#*$'\n'}

第一个删除最长的后缀模式\n*,第二个删除最短的前缀模式*\n

答案2

当然,这很简单。

inVal=$(perl -e 'print $2 if $ARGV[0]=~/^(\\033\[.*?m)(.*)$/mis;' -- "${1}")

末尾缺少 's'

相关内容