我有事跟下面的語法猛砸排序正則表達式
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