字符串 - 递归提取文件版本

字符串 - 递归提取文件版本

我一直在使用strings提取和比较目录之间的文件版本。

我似乎无法递归地执行此操作。

我对每个文件使用的方法是:

strings -e l FILENAME.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | cut -d ' ' -f 2

删除文件名并替换为 * 有效。但我只得到文件版本,没有文件名。包括 -F 给我字符串的文件名。

但我不明白如何格式化 Sed / Grep 来仅收集文件名和版本号。

答案1

听起来你想打印以 结尾的行FileVersion,所以它应该只是一个问题:

strings -f -e l -- *.exe | sed -n '/FileVersion$/{n;p;}'

答案2

你可以这样做:

 strings -e l -f FILENAME.exe | sed -n -e :a -e '/FileVersion$/,/.*/{/FileVersion$/d;/.*/p}'

这将使 sed 不会打印任何“-n”行,除了用 p 告诉它的行之外。然后你告诉它找到以 FileVersion 结尾的行和下一个模式,因为结束模式是 .* 它将匹配下一行:)。然后,您告诉它删除 FileVersion 行并打印其余部分,其中将包含您的版本:)。

答案3

这只是对 cut 和 sed 的使用理解不好。

对一个衬里稍作调整:

strings -f -e l *.exe | sed -e :a -e '/FileVersion$/N; s/FileVersion\n/FileVersion /; ta' | grep FileVersion | sed 's/.*FileVersion//'

因此字符串使用 -f 作为文件名,使用 -e 作为必要的文件信息。

sed 用于剥离并保留文件版本

然后 grep 将该信息定位到屏幕上

然后最后一个 sed 在 Fileversion 之前删除内容(这不是正确的方法,我发现理解 sed 的模式很复杂)

sed 's/.*FileVersion//'

如果有人想发布 sed 的正确格式,我会很乐意更新它。不幸的是,对 sed 的模式和理解并没有完全理解。

相关内容