Sort a list of filenames alphabetically but grouped by their extension
-
I have a text file which goes like this:
apple.c
orange.hpp
plum.h
mango.c
banana.cpp
grapes.hppI want the above text sorted alphabetically but grouped based on their extensions: i.e,
apple.c
mango.c
banana.cpp
plum.h
grapes.hpp
orange.hppHow can I do this in Notepad++?
-
Hello, Anu Anand Premji,
Very easily, indeed ! you just need two S/R, in regex mode and a classical sort :-))
So, from your original text, below :
apple.c orange.hpp plum.h mango.c banana.cpp grapes.hpp-
First, move back to the very beginning of your file, containing a list of filenames ( Ctrl + Home )
-
Open the Replace dialog ( Ctrl + H )
-
Select the Regular expression search mode
-
Fill up the two fields Find what: and Replace with:, with the values, below :
SEARCH
(?-s)^.+\.(.+)REPLACE
\1\t\t$0- Click on the Replace all button
=> You should obtain the changed text, below :
c apple.c hpp orange.hpp h plum.h c mango.c cpp banana.cpp hpp grapes.hpp- Now, perform a classical sort with the menu option Edit > Line operations > Sort Lines Lexicographically Ascending
=> We get the sorted text, below :
c apple.c c mango.c cpp banana.cpp h plum.h hpp grapes.hpp hpp orange.hpp- Again, open the Replace dialog and type the regex expressions, below :
SEARCH
(?-s)^.+\t+REPLACE
Leave the field EMPTYYeah ! Here is our final text, sorted as expected :-))
apple.c mango.c banana.cpp plum.h grapes.hpp orange.hppI’ve got to be out for a while ! But, when I’m home, I’ll add some explanations to my regexes, just in case that you’re not acquainted with regular expressions !
Best Regards,
guy038
-
-
Wow!!! That worked perfectly!! Thank you!!
Saved me a lot of work!! -
Hi Anu Anand Premji and All,
Well, I’m back home and here are some explanations on the two S/R :
-
The two search regex begin with the modifier
(?-s)( No PCRE_DOTALL ) that ensures that the regex engine will consider the dot special character.will match only a single standard character and not an EOL character -
Then the part,
^.+\.matches, from the beginning of the current line^, a maximum, NON empty, of characters, till a literal dot character ( which must be escaped by an antislash character\in order to be considered as literal ) So, if the filename would be, for instance, “abc.def.ghi.cpp”, this range would be the string abc.def.ghi -
The remainder of the search regex
(.+)catches the remainder of the standard characters of the current line ( The extension part ) which is stored as group 1, due to the couple of parentheses -
In replacement, the regex
\1\t\t$0rewrites the group 1 ( The extension part ), then two tabulation characters and, finally, the searched string, that is to say the name of each file, with its extension ( part$0) -
I preferred to use the tabulation character, instead of some spaces, because, with the tabulation character, the complete filenames look all aligned :-)
-
In the second S/R the part
^.+selects, from the beginning of each line^, the range maximum, NON empty, of standard characters, till a non empty range of tabulation characters\t+ -
As the replacement field is, this time, empty, all these characters, included tabulations , are, simply, deleted !
Cheers,
guuy038
-
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login