【问题标题】:How to extract file name from file list?如何从文件列表中提取文件名?
【发布时间】:2013-11-06 22:03:44
【问题描述】:

现在我有几个文件,它们的名称包括版本号,我只想提取它们的文件名并去掉版本号,

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_5.1.10.apk 中提取 YouTube 或 YouTube.apk。

【问题讨论】:

    标签: linux sed awk vi kingsoft


    【解决方案1】:

    使用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
    

    【讨论】:

    • cn.msn.messenger.1370207212755.apk有没有其他解决方案?
    • 这会很困难,因为有不同的字段分隔符。我们可以在这里说最后一个由.分隔的文件应该被删除,但在这里不起作用:WhatsApp_2.11.93.apk
    【解决方案2】:
    cat file | sed 's/\([^_]*\)\(.*apk\)/\1.apk/'
    

    【讨论】:

    • 请注意,您可以使用sed ... file 摆脱cat file | sed
    【解决方案3】:
    sed "s/_[^_]*.apk$/.apk/" YourFile
    

    假设最后一个“_”是分隔符,不包括在内

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2011-04-28
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多