我有事跟下面的语法猛砸排序正则表达式
ahfsdjfhdfhj_EPI_34_fdsafasdf
asdfasdf_EPI_2_fdsf
hfdjh_EPI_8_dhfffffffffff
ffffffffffasdfsdf_EPI_1_fyyy44
...
约100文件总是有EPI_NUMBER。我怎样才能按这个数字排序呢?
我有事跟下面的语法猛砸排序正则表达式
ahfsdjfhdfhj_EPI_34_fdsafasdf
asdfasdf_EPI_2_fdsf
hfdjh_EPI_8_dhfffffffffff
ffffffffffasdfsdf_EPI_1_fyyy44
...
约100文件总是有EPI_NUMBER。我怎样才能按这个数字排序呢?
从你的例子看来,分隔符是_
,文本EPI_nnn
在分隔符_
后面出现在相同的位置。如果总是这样的,那么你可以使用以下命令将文件进行排序:
sort -n -t "_" -k 3 file.txt
UPDATE:
如果EPI_
文本的位置不固定然后用下面的shell命令:
sed 's/^\(.*EPI_\)\(.*\)$/\2##\1/' file.txt | sort -n -t "_" -k1 | sed 's/^\(.*\)##\(.*\)$/\2\1/'
如果Perl是好的,您可以:
print sort foo <>;
sub foo {
($x = $a) =~s/.*EPI_(\d+).*/$1/;
($y = $b) =~s/.*EPI_(\d+).*/$1/;
return $x <=> $y;
}
,并用它作为:
perl prg.pl inputfile
sed -e 's/EPI_/EPI /' file1 file2 ...|sort -n -k 2 -t ' '
管,要sed -e 's/ /_/'
找回原来的形式。
'ls | sed's /.* EPI _ //'| sort -n |同时读一个;做echo'ls | grep $ {a}';完成'解决了我的问题 – mecio 2011-12-30 15:41:32
这可能会为你工作:
ls | sed 's/.*EPI_\([0-9]*\)/\1 &/' | sort -n | sed 's/\S* //'
能串_before_'_EPI_'包含'_',且数量总是跟着一个'_'吗? – Mat 2011-12-30 14:45:55