使用纯bash中的regexp提取substring

前端之家收集整理的这篇文章主要介绍了使用纯bash中的regexp提取substring前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图从字符串使用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}}}'
原文链接:https://www.f2er.com/bash/390282.html

猜你在找的Bash相关文章