加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用纯bash中的regexp提取substring

发布时间:2020-12-15 16:13:09 所属栏目:安全 来源:网络整理
导读:我试图从字符串使用bash提取时间,我有一个很难计算出来。 我的字符串是这样的: US/Central - 10:26 PM (CST) 我想提取10:26部分。 任何人都知道一个方法,这样做只用bash – 不使用sed,awk等等? 喜欢,在PHP我会使用 – 不是最好的方式,但它的工作原理
我试图从字符串使用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+Kd{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+Kd{2}:d{2}/'

和最后一个使用awk:

$ echo "US/Central - 10:26 PM (CST)" |
    awk '{for (i=0; i<=NF; i++){if ($i == "-"){print $(i+1);exit}}}'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读