Linux
從 txt 文件中 grep 日期和時間以獲取新變數
我需要從文本文件中提取日期(年、月、日)和時間(小時、分鐘),然後將它們用作變數。不是作業,只是想為我的工作做一些有用的事情。我是 Linux 新手。
輸入:文本文件包含文件列表,名稱如下:
S3G_MX_1_EFR____20100203T121015_othernumbers.zip
期望的輸出是:
2010 02 03 12 10
我想將它們分別放入幾個變數中:年、月、日、小時、分鐘。我應該使用grep嗎?還是sed?還是awk?讀了很多書,但由於各種可能性而感到壓力。是否可以在字元串“年份”之後寫出“4 個數字”之類的表達式
S3G_MX_1_EFR____
?我不需要完整的程式碼,只需要一些建議使用什麼選項/命令或從哪裡開始。
使用 GNU grep 和 bash:
filename="S3G_MX_1_EFR____20100203T121015_othernumbers.zip" timestamp=$( echo "$filename" | grep -oP '(?<=\D)\d{8}T\d{4}' )
然後
year=${timestamp:0:4}; echo $year # => 2010 month=${timestamp:4:2}; echo $month # => 02 day=${timestamp:6:2}; echo $day # => 03 hour=${timestamp:9:2}; echo $hour # => 12 minute=${timestamp:11:2}; echo $minute # => 10
實際上,普通的 bash 就可以了(需要版本 4+)
regex='_([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})' if [[ $filename =~ $regex ]]; then year=${BASH_REMATCH[1]} month=${BASH_REMATCH[2]} day=${BASH_REMATCH[3]} hour=${BASH_REMATCH[4]} minute=${BASH_REMATCH[5]} echo "$year $month $day $hour $minute" fi
2010 02 03 12 10