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
但沒有。一個人試過.*
,什麼都沒有。嘗試了各種修飾符等…這一定很簡單,但我找不到答案。
**更好的是,如果這可以在一行中完成。**而不是執行兩次比賽。
當然這很簡單。
inVal=$(perl -e 'print $2 if $ARGV[0]=~/^(\\033\[.*?m)(.*)$/mis;' -- "${1}")
最後缺少’s'
與
bash
:inCol=${postmsg%%$'\n'*} inVal=${postmsg#*$'\n'}
第一個刪除最長的後綴模式
\n*
,第二個刪除最短的前綴模式*\n
。