bash 或 perl 内联捕获多个模式匹配
bash or perl inline capture of multiple pattern matches
简单的事情:
content='"id":"1234"abcdefg"id":"3456"'
需要获取 id:
perl -le '@m = ( $content =~ /\"id\"\:\"(.*)\"/g); print for @m'
不工作,但需要一个衬里用于汇合 json/output 以供 Ansible 处理。
使用
grep -Po 'id":"\K.*?(?=")' <<< "$content"
-P
启用 perl 正则表达式。
-o
只打印匹配的部分而不是整行。
\K
让 grep 忘记它之前匹配 id":"
。
.*?
匹配尽可能少的字符 ...
(?=")
... 直到 "
是下一个字符。 "
将不会包含在匹配项中。
示例的输出:
1234
3456
在 Perl 中:
perl -sE 'say for $str =~ /"id":"(.*?)"/g' -- -str="$content"
简单的事情:
content='"id":"1234"abcdefg"id":"3456"'
需要获取 id:
perl -le '@m = ( $content =~ /\"id\"\:\"(.*)\"/g); print for @m'
不工作,但需要一个衬里用于汇合 json/output 以供 Ansible 处理。
使用
grep -Po 'id":"\K.*?(?=")' <<< "$content"
-P
启用 perl 正则表达式。
-o
只打印匹配的部分而不是整行。
\K
让 grep 忘记它之前匹配 id":"
。
.*?
匹配尽可能少的字符 ...
(?=")
... 直到 "
是下一个字符。 "
将不会包含在匹配项中。
示例的输出:
1234
3456
在 Perl 中:
perl -sE 'say for $str =~ /"id":"(.*?)"/g' -- -str="$content"