1

这是 grep 命令:

grep "%SWFPATH%/plugins/" filename 

及其输出:

set(hotspot[hs_bg_%2].url,%SWFPATH%/plugins/textfield.swf);
set(hotspot[hs_%2].url,%SWFPATH%/plugins/textfield.swf);
url="%SWFPATH%/plugins/textfield.swf"
url="%SWFPATH%/plugins/scrollarea.swf"
alturl="%SWFPATH%/plugins/scrollarea.js"
url="%SWFPATH%/plugins/textfield.swf"

我想生成一个文件,其中包含“plugins/”目录中所有文件的名称,这些文件在某个文件中提到。

基本上我需要从每一行中提取文件名和扩展名。我可以设法删除任何重复项,但我不知道如何提取我需要的信息。

这将是我想要获得的文件的内容:

textfield.swf
scrollarea.swf
strollarea.js

谢谢!!!

PS:线程“Extract filename and extension in bash (14 answers)”解释了如何从“变量”中获取文件名和扩展名。我想要实现的是从“文件”中提取这些,这是完全不同的

4

3 回答 3

2

使用awk

grep "%SWFPATH%/plugins/" filename | \
awk '{ match($0, /plugins\/([^\/[:space:]]+)\.([[:alnum:]]+)/,submatch);
     print "filename:"submatch[1];
     print "extension:"submatch[2];
    }'

一些解释:

match函数获取由awk(由 表示$0)处理的每一行并查找与该正则表达式的匹配项。子匹配(与括号之间的正则表达式部分匹配的字符串部分)保存在数组中submatchprint就像它看起来一样简单,它只是打印东西。

于 2013-06-06T17:04:41.527 回答
1

对于这个特定的问题

awk '/\/plugins\// {sub(/.*\//, ""); sub(/(\);|")?$/, "");
   arr[$0] = $0} END {for (i in arr) print arr[i]}' filename
于 2013-06-06T17:05:07.423 回答
1

用于awk简单地提取文件名,然后sed清理尾随的 )"; 字符。

 awk -F/ '{print $NF}' a  | sed -e 's/);//' -e 's/"$//'
于 2013-06-06T17:08:04.793 回答