2

特定の日付形式 (hh:mm:ss) を次のように分割する必要があります: 10:30:50 のような変数: hour=10; 分= 30および秒= 50は、bashスクリプトでgrepを実行します。

たとえば、変数で時間を取得します。 time="10:30:50" そして、次の式で秒のみを取得します。

秒=echo $time | grep -oE "[^:]+$"

分と時間を取得するのに役立ちますか?

4

5 に答える 5

8

を使用しreadます。grepこれはシェルの組み込みコマンドであるため、sedや他の外部コマンドよりも効率的です。

time="10:30:50"
IFS=: read hr min sec <<< "$time"

出力:

$ echo "$hr"
10
$ echo "$min"
30
$  echo "$sec"
50
于 2013-04-09T09:33:51.327 に答える
1

下記参照 :

kent$  time="10:30:50"

kent$  h=$(awk -F: '$0=$1' <<<"$time")
kent$  m=$(awk -F: '$0=$2' <<<"$time")                                                                                                                                      
kent$  s=$(awk -F: '$0=$3' <<<"$time")                                                                                                                                      

kent$  echo $h,$m,$s
10,30,50
于 2013-04-09T09:35:27.473 に答える
0

@fedorqui、@kent、

$ echo ${time:0:2}
10

$ echo ${time:3:2}
30

$ echo ${time:6:2}
50
于 2013-12-27T04:43:51.033 に答える
0

sed、grep、awk は外部コマンドです。シェル組み込みコマンドを使用して、必要な情報を抽出してみてください

D=12:10:12

IFS=:

read H M S <<< $D

注: <<< は変数からの読み取りを意味します

于 2013-04-10T08:53:44.677 に答える
0

sed:

echo '10:30:50' | sed 's/\([0-9]\+\):\([0-9]\+\):\([0-9]\+\)/hours=\1 minutes=\2 seconds=\3/'

それを関数にします:

function stringToTime() {
    eval $( echo "$1" | sed 's/\([0-9]\+\):\([0-9]\+\):\([0-9]\+\)/hours=\1 minutes=\2 seconds=\3/' )
}

これで、次のように呼び出すことができます。

stringToTime 10:30:50
echo $hours hours, $minutes minutes and $seconds seconds
于 2013-04-09T09:35:05.733 に答える