Perl

Bash Perl 多行匹配到變數

  • June 11, 2019

我正在嘗試從多行文本中提取 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

引用自:https://unix.stackexchange.com/questions/524098