複数行のテキストから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」がありません。