2013-10-28 3 views
0

Теперь у меня есть несколько файлов, имена которых содержат номер версии, я хочу, чтобы извлечь их имя файла только и полосу номера версии,Как извлечь имя файла из списка файлов?

ES File Explorer_3.0.5.5.apk 
ES Task Manager_1.4.1.apk 
Facebook_3.7.apk 
Gmail_4.6 (836823).apk 
Google+_4.1.2.51968121.apk 
Google Play Books_2.9.21.apk 
Google Search_2.8.8.849369.arm.apk 
Hangouts_1.2.018 (849105-30).apk 
Instagram_4.1.2.apk 
Kingsoft Office_5.7.3.apk 
Maps_7.2.0.apk 
Skype_4.4.0.31369.apk 
Translate_2.8.apk 
Twitter_4.1.8L.apk 
WhatsApp_2.11.93.apk 
YouTube_5.1.10.apk 

Как сделать? используя vi, sed или awk? Такие, как извлечение YouTube или YouTube.apk из YouTube_5.1.10.apk.

ответ

3

Использование awk

awk -F_ '{print $1 ".apk"}' file 
ES File Explorer.apk 
ES Task Manager.apk 
Facebook.apk 
Gmail.apk 
Google+.apk 
Google Play Books.apk 
Google Search.apk 
Hangouts.apk 
Instagram.apk 
Kingsoft Office.apk 
Maps.apk 
Skype.apk 
Translate.apk 
Twitter.apk 
WhatsApp.apk 

версия, чтобы исправить cn.msn.messenger.1370207212755.apk

awk '{gsub(/[0-9].*|_/,x);gsub(/\.$/,x)} {print $0 ".apk"}' file 
+0

Есть ли другое решение для решения ith cn.msn.messenger.1370207212755.apk? –

+0

Было бы сложно, так как есть разные разделители полей. Здесь мы можем сказать, что последняя поданная, разделенная '.', должна быть удалена, но здесь не будет работать:' WhatsApp_2.11.93.apk' – Jotne

2
cat file | sed 's/\([^_]*\)\(.*apk\)/\1.apk/' 
+1

Обратите внимание, что вы можете использовать 'sed ... file', чтобы избавиться от' cat file | sed '. – fedorqui

1
sed "s/_[^_]*.apk$/.apk/" YourFile 

предполагая, что последний "_" является ограничителем и не входит в

Смежные вопросы