【问题标题】:dynamic string search in shell scriptshell脚本中的动态字符串搜索
【发布时间】:2018-08-24 14:53:50
【问题描述】:

我在shell脚本中有一个字符串

list="apr/2018-06-24 17_10_39/2018-06-24 17_10_39.html 

 apr/2018-06-24 17_10_39/access_log.zip

 apr/2018-06-25 17_12_48/2018-06-25 17_12_48.html

 apr/2018-06-25 17_12_48/access_log.zip

 apr/2018-06-26 17_13_36/2018-06-26 17_13_36.html

  DS_BLS_731.dat

 DS_BLS_732.dat

 DS_BLS_733.dat

 apr/2018-06-26 17_13_37/ DS_BLS_739.dat

 apr/2018-06-26 17_13_38/ DS_BLS_738.dat

 apr/2018-06-26 17_13_39/ DS_BLS_737.dat"

我需要找到 DS_BLS_max(sequence number).dat

这里是 DS_BLS_max(序列号).dat=DS_BLS_739.dat

【问题讨论】:

    标签: regex linux bash shell


    【解决方案1】:
    grep -o 'DS_BLS_[0-9]*\.dat' <<< "$list" | sort -V | tail -n 1
    

    输出:

    DS_BLS_739.dat

    见:The Stack Overflow Regular Expressions FAQ

    【讨论】:

    • 但是请注意 11 &lt; 2 &lt; 3 在词法排序中。所以如果你有DS_BLS_1739.dat,你就不会得到它作为最大值。
    • @Cyrus ..感谢您的回复。解决方案工作正常..如果我需要获取整个字符串怎么办。例如 apr/2018-06-26 17_13_37/ DS_BLS_739.dat 应该返回 apr/2018-06-26 17_13_37/ DS_BLS_739.dat 但它只返回 DS_BLS_739.dat
    • @user1643763:使用 Schwartzian transform 和 GNU sed:sed -nE '/DS_BLS_[0-9]*\.dat/{s/.*(DS_BLS_[0-9]*\.dat).*/\1 &amp;/p}' file | sort -V | tail -n 1 | cut -d " " -f 2-
    猜你喜欢
    • 2015-12-21
    • 2011-01-20
    • 2013-09-25
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多