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}")

私の入力が文字列の1行であれば実際に動作します。それ以外の場合は何も生成されません。

.*$ラインの最後までマッチしてみ\Zましたが、結果は出ませんでした。一人で試してみましたが、.*何も得られませんでした。

様々な修飾語などを使ってみました。簡単な内容ですが、答えが見つかりません。

1行で処理できると良いと思います。ゲームを2回実行する代わりに。

答え1

そしてbash

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

最初は最長の接尾辞パターンを削除し\n*、2番目は最短の接頭辞パターンを削除します*\n

答え2

もちろん簡単です。

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

最後に「s」がありません。

関連情報