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

时间:2019-08-30 15:01:20

标签: 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 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无法实现,则我可以使用其他任何工具。

2 个答案:

答案 0 :(得分:1)

我会选择egrep -o

echo $line | egrep -o "as[-_A-Za-z0-9]*.bin"

答案 1 :(得分:0)

这可能对您有用(GNU sed):

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

这将删除不包含模式的任何行,否则它将用换行符将模式包围,删除直到并包括第一个换行符,打印与该模式匹配的字符串,删除该模式以及随后的换行符并重复。