Extract substring using regexp in plain bash

前端 未结 4 1177
清酒与你
清酒与你 2020-11-27 10:52

I\'m trying to extract the time from a string using bash, and I\'m having a hard time figuring it out.

My string is like this:

US/Central - 10:26 PM          


        
相关标签:
4条回答
  • 2020-11-27 11:00

    If your string is

    foo="US/Central - 10:26 PM (CST)"
    

    then

    echo "${foo}" | cut -d ' ' -f3
    

    will do the job.

    0 讨论(0)
  • 2020-11-27 11:08
        echo "US/Central - 10:26 PM (CST)" | sed -n "s/^.*-\s*\(\S*\).*$/\1/p"
    
    -n      suppress printing
    s       substitute
    ^.*     anything at the beginning
    -       up until the dash
    \s*     any space characters (any whitespace character)
    \(      start capture group
    \S*     any non-space characters
    \)      end capture group
    .*$     anything at the end
    \1      substitute 1st capture group for everything on line
    p       print it
    
    0 讨论(0)
  • 2020-11-27 11:17

    Using pure bash :

    $ cat file.txt
    US/Central - 10:26 PM (CST)
    $ while read a b time x; do [[ $b == - ]] && echo $time; done < file.txt
    

    another solution with bash regex :

    $ [[ "US/Central - 10:26 PM (CST)" =~ -[[:space:]]*([0-9]{2}:[0-9]{2}) ]] &&
        echo ${BASH_REMATCH[1]}
    

    another solution using grep and look-around advanced regex :

    $ echo "US/Central - 10:26 PM (CST)" | grep -oP "\-\s+\K\d{2}:\d{2}"
    

    another solution using sed :

    $ echo "US/Central - 10:26 PM (CST)" |
        sed 's/.*\- *\([0-9]\{2\}:[0-9]\{2\}\).*/\1/'
    

    another solution using perl :

    $ echo "US/Central - 10:26 PM (CST)" |
        perl -lne 'print $& if /\-\s+\K\d{2}:\d{2}/'
    

    and last one using awk :

    $ echo "US/Central - 10:26 PM (CST)" |
        awk '{for (i=0; i<=NF; i++){if ($i == "-"){print $(i+1);exit}}}'
    
    0 讨论(0)
  • 2020-11-27 11:23

    Quick 'n dirty, regex-free, low-robustness chop-chop technique

    string="US/Central - 10:26 PM (CST)"
    etime="${string% [AP]M*}"
    etime="${etime#* - }"
    
    0 讨论(0)
提交回复
热议问题