我试图从字符串使用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:
$ 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}}}'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。