这是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:线程“在bash中提取文件名和扩展名(14个答案)”解释了如何从'变量'获取文件名和扩展名。我想要实现的是从'文件'中提取这些,这是完全不同的'
答案 0 :(得分:2)
使用 awk :
grep "%SWFPATH%/plugins/" filename | \
awk '{ match($0, /plugins\/([^\/[:space:]]+)\.([[:alnum:]]+)/,submatch);
print "filename:"submatch[1];
print "extension:"submatch[2];
}'
一些解释:
match
函数接受由awk
处理的每一行(由$0
表示)并查找与该正则表达式的匹配项。子匹配(字符串中与括号内正则表达式部分匹配的部分)保存在数组submatch
中。 print
看起来很简单,只是打印东西。
答案 1 :(得分:1)
针对此特定问题
awk '/\/plugins\// {sub(/.*\//, ""); sub(/(\);|")?$/, "");
arr[$0] = $0} END {for (i in arr) print arr[i]}' filename
答案 2 :(得分:1)
使用awk
简单地提取文件名,然后使用sed
清除尾随符号“;;字符。
awk -F/ '{print $NF}' a | sed -e 's/);//' -e 's/"$//'