我试图从字符串使用bash提取时间,我有一个很难计算出来。
我的字符串是这样的:
US/Central - 10:26 PM (CST)
我想提取10:26部分。
任何人都知道一个方法,这样做只用bash – 不使用sed,awk等等?
喜欢,在PHP我会使用 – 不是最好的方式,但它的工作原理:
preg_match( ""(\d{2}\:\d{2}) PM \(CST\)"","US/Central - 10:26 PM (CST)",$matches );
感谢任何帮助,即使答案使用sed或awk
使用纯
bash:
原文链接:https://www.f2er.com/bash/390282.html$ cat file.txt US/Central - 10:26 PM (CST) $ while read a b time x; do [[ $b == - ]] && echo $time; done < file.txt
另一个解决方案与bash regex:
$ [[ "US/Central - 10:26 PM (CST)" =~ -[[:space:]]*([0-9]{2}:[0-9]{2}) ]] && echo ${BASH_REMATCH[1]}
另一个解决方案使用grep和环视高级regex:
echo "US/Central - 10:26 PM (CST)" | grep -oP "\-\s+\K\d{2}:\d{2}"
另一个使用sed的解决方案:
$ echo "US/Central - 10:26 PM (CST)" | sed 's/.*\- *\([0-9]\{2\}:[0-9]\{2\}\).*/\1/'
另一个使用perl的解决方案:
$ echo "US/Central - 10:26 PM (CST)" | perl -lne 'print $& if /\-\s+\K\d{2}:\d{2}/'
和最后一个使用awk:
$ echo "US/Central - 10:26 PM (CST)" | awk '{for (i=0; i<=NF; i++){if ($i == "-"){print $(i+1);exit}}}'