目标是从一行文本中提取与模式匹配的所有字符串,并将结果显示为列表。
例如:
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无法实现,则我可以使用其他任何工具。
答案 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
这将删除不包含模式的任何行,否则它将用换行符将模式包围,删除直到并包括第一个换行符,打印与该模式匹配的字符串,删除该模式以及随后的换行符并重复。