Sed 如何将一行中的所有模式匹配提取到列表中

Sed 如何将一行中的所有模式匹配提取到列表中,sed,Sed,目标是从一行文本中提取与模式匹配的所有字符串,并将结果显示为列表 例如: pattern="as[^\',]+?\.bin" line="[['Directory of boot:/', '', '81 -rwx 110665728 17:33:44 Mar 25 2018 asa992-smp-k8.bin', '82 -rwx 32738292 17:33:44 Mar 25 2018 asdm-79247.bin', '83 -rwx 59123840 17:33:44 Mar 25 20

目标是从一行文本中提取与模式匹配的所有字符串,并将结果显示为列表

例如:

pattern="as[^\',]+?\.bin"
line="[['Directory of boot:/', '', '81 -rwx 110665728 17:33:44 Mar 25 2018 asa992-smp-k8.bin', '82 -rwx 32738292 17:33:44 Mar 25 2018 asdm-79247.bin', '83 -rwx 59123840 17:33:44 Mar 25 2018 asa-restapi-132300-lfbff-k8.SPA', '', '3 file(s) total size: 202527860 bytes', '534495232 bytes total (331800576 bytes free/62% free)']]"
我试过:

echo $line | sed -E "s|.* (${pattern}).*|\1|g"
asdm-79247.bin
我期望:

asa992-smp-k8.bin
asdm-79247.bin
有什么建议吗


如果sed无法实现,我愿意使用任何其他工具。

我会使用egrep-o

echo $line | egrep -o "as[-_A-Za-z0-9]*.bin"
这可能适用于您(GNU-sed):

这将删除不包含该模式的任何行,否则它将以换行符包围该模式,最多删除并包括第一个换行符,打印与该模式匹配的字符串,删除该模式和下面的换行符并重复

pattern=as[^\',]+?\.bin
sed -E '/'"${pattern}"'/!d;s//\n&\n/;s/[^\n]*\n//;P;D' file