bash中:
1)对于给定的groupname
感兴趣的人,并且
2)感兴趣的keys
列表,为此我们需要一个值表,用于此组名,
3)读入一组文件,就像/usr/share/applications
(请参见下面的简化示例)中的文件一样,
4)并生成一个分隔表,每个文件一行,每个给定键一个字段。
我们只需要[Desktop Entry]
组以及一个或多个文件中的 Name 和 Exec 键的值,如下所示:>
[Desktop Entry]
Name=Root
Comment=Opens
Exec=e2
..
[Desktop Entry]
Comment=Close
Name=Root2
两行,每个输入文件一行,每行以定界<Name>,<Exec>
格式,准备导入数据库:
Root,e2
Root2,
每个输入文件是:
[请原谅,如果我正在寻求解决旧问题的方法,但是我似乎找不到一种快速的好方法来做到这一点。是的,我可以花一些时间编写代码并读取循环等,但是肯定已经完成了。]
类似于this Q,但需要更笼统的答案。
答案 0 :(得分:2)
如果选择awk
,请尝试以下操作:
awk -v RS="[" -v FS="\n" '{ # split the file into records on "["
# and split the record into fields on "\n"
name = ""; exec = "" # reset variables
if ($1 == "Desktop Entry]") {
# if the groupname matches
for (i=2; i<=NF; i++) { # loop over the fields (lines) of "key=value" pairs
if (sub(/^Name=/, "", $i)) name = $i
# the field (line) starts with "Name="
else if (sub(/^Exec=/, "", $i)) exec = $i
# the field (line) starts with "Exec="
}
print name "," exec
}
}' file
您可以将多个文件作为file1 file2 file3
,dir/file*
或其他任何文件来填充。