Bash按正则表达式排序

mec*_*cio 7 linux sorting bash console

我有大约100个文件,具有以下语法

ahfsdjfhdfhj_EPI_34_fdsafasdf
asdfasdf_EPI_2_fdsf
hfdjh_EPI_8_dhfffffffffff
ffffffffffasdfsdf_EPI_1_fyyy44

...
Run Code Online (Sandbox Code Playgroud)

总有EPI_NUMBER.我该如何按这个数字排序?

anu*_*ava 10

从您的示例中可以看出,分隔符_和分隔符后文本EPI_nnn位于相同的位置_.如果总是如此,那么您可以使用以下命令对文件进行排序:

sort -n -t "_" -k 3 file.txt
Run Code Online (Sandbox Code Playgroud)

更新:

如果EPI_文本的位置未修复,则使用以下shell命令:

sed 's/^\(.*EPI_\)\(.*\)$/\2##\1/' file.txt | sort -n -t "_" -k1 | sed 's/^\(.*\)##\(.*\)$/\2\1/'
Run Code Online (Sandbox Code Playgroud)