CATS="Audio Graphics Network Settings System Utility" for CAT in $CATS; do echo " Submenu = \"$CAT\" {" for CATMATCH in `grep -l "^Categories=.*$CAT.*" /usr/share/applications/*.desktop`; do name=`sed -n '1,/^Name=/ s/^Name=//p' <$CATMATCH` exec=`sed -e 's/ %[UuFf]//' -ne '1,/^Exec=/ s/^Exec=//p' <$CATMATCH` echo " Entry = \"$name\" { Actions = \"Exec $exec\" }" done echo " }" done ##SEDLESS EQUIVALENT## #CATS="Audio Graphics Network Settings System Utility" #for CAT in $CATS; do # echo " Submenu = \"$CAT\" {" # for CATMATCH in `grep -l "^Categories=.*$CAT.*" /usr/share/applications/*.desktop`; do # name=`grep "^Name=" $CATMATCH` # exec=`grep "^Exec=" $CATMATCH`; exec=${exec% %[FfUu]} # echo " Entry = \"${name#Name=}\" { Actions = \"Exec ${exec#Exec=}\" }" # done # echo " }" #done #### @Cats = ("Audio","Graphics","Network","Settings","System","Utility"); $Dir = "/usr/share/applications"; opendir(DIR,"$Dir"); @Files=readdir(DIR); foreach $Cat (@Cats) { print "Submenu = \"$Cat\" { \n"; foreach $File (@Files) { open FILE, "$Dir/$File"; while () { if(/Categories=.*$Cat.*/) { @Matches = $File; foreach $Match (@Matches) { open MATCH, "$Dir/$Match"; while () { #$string = $_; @Names = $_=~ (/^Name=(.*)/o); @Execs = $_=~ (/^Exec=(.*)/o); foreach $Name (@Names) { print " Entry = \"$Name\" "; }; foreach $Exec (@Execs) { $Exec =~ s/(.*) %[uUfF]/$1/; print "{ Actions = \"Exec $Exec\" }\n"; }; }; }; }; }; }; print "}\n"; };