2013-10-09 109 views
0

我有一些文件(.txt),名稱是:Linux:我如何從文件名中提取信息?

run_freq100ampl0.6offs0.8_1 
run_freq100ampl0.4offs1.1_1 
run_freq100ampl0.2offs1.0_1 
run_freq100ampl0.4offs1.2_1 
run_freq100ampl0.2offs1.1_1 
run_freq100ampl0.5offs0.8_1 
run_freq100ampl0.2offs1.2_1 
run_freq100ampl0.4offs0.8_1 

我想獲得AMPL的數量,像

0.6 
0.4 
0.2 
0.4 
0.2 
0.5 
0.2 
0.4 

如何與做 '發現',「grep的'或'貓'在Linux?

回答

1

使用grep

grep -Po '(?<=ampl).*(?=offs)' input 

實施例:

$ grep -Po '(?<=ampl).*(?=offs)' <<< "run_freq100ampl0.2offs1.1_1" 
0.2 

sed使用:

$ sed 's/.*ampl\(.*\)offs.*/\1/' <<< "run_freq100ampl0.2offs1.1_1" 
0.2 
+0

謝謝!但我想一次顯示所有值。我該怎麼做? – user2862989

+0

@ user2862989或者說'sed's /.* ampl \(。* \)offs。*/\ 1 /'filename'或'grep -Po'(?<= ampl)。*(?= offs)'filename ' – devnull

+0

@ user2862989由於您是新手,請不要忘記標記接受的答案,如果您的問題已解決。您可以點擊答案旁邊的複選標記將其從空心切換爲綠色。如果您有任何疑問,請參閱[幫助中心>提問](http://stackoverflow.com/helpcenter/someone-answers)! – fedorqui

0

使用awk

awk -F"ampl|off" '{print $2}' 
0.6 
0.4 
0.2 
0.4 
0.2 
0.5 
0.2 
0.4 

或者使用固定位置

awk '{print substr($0,16,3)}' 
0
for f in *.txt 
do 
    f=${f%offs*} 
    f=${f#*ampl} 
    echo ${f} 
done