我正在尝试从多行文本中提取 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'