首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在普通bash中使用regexp提取子字符串

在普通bash中使用regexp提取子字符串
EN

Stack Overflow用户
提问于 2012-11-14 12:52:02
回答 5查看 203.9K关注 0票数 118

我正在尝试使用bash从字符串中提取时间,但我很难弄清楚。

我的字符串是这样的:

代码语言:javascript
复制
US/Central - 10:26 PM (CST)

我想提取10:26部分。

有没有人知道一种只用bash就能做到这一点的方法--不用sed、awk等?

例如,在PHP中,我会使用-不是最好的方法,但它是有效的-类似于:

代码语言:javascript
复制
preg_match( ""(\d{2}\:\d{2}) PM \(CST\)"", "US/Central - 10:26 PM (CST)", $matches );

感谢您的帮助,即使答案使用sed或awk

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-14 12:54:29

使用纯bash

代码语言:javascript
复制
$ cat file.txt
US/Central - 10:26 PM (CST)
$ while read a b time x; do [[ $b == - ]] && echo $time; done < file.txt

使用bash regex的另一种解决方案:

代码语言:javascript
复制
$ [[ "US/Central - 10:26 PM (CST)" =~ -[[:space:]]*([0-9]{2}:[0-9]{2}) ]] &&
    echo ${BASH_REMATCH[1]}

另一个使用grep和环视高级正则表达式的解决方案:

代码语言:javascript
复制
$ echo "US/Central - 10:26 PM (CST)" | grep -oP "\-\s+\K\d{2}:\d{2}"

另一种使用sed的解决方案:

代码语言:javascript
复制
$ echo "US/Central - 10:26 PM (CST)" |
    sed 's/.*\- *\([0-9]\{2\}:[0-9]\{2\}\).*/\1/'

另一种使用perl的解决方案:

代码语言:javascript
复制
$ echo "US/Central - 10:26 PM (CST)" |
    perl -lne 'print $& if /\-\s+\K\d{2}:\d{2}/'

最后一个使用awk:

代码语言:javascript
复制
$ echo "US/Central - 10:26 PM (CST)" |
    awk '{for (i=0; i<=NF; i++){if ($i == "-"){print $(i+1);exit}}}'
票数 247
EN

Stack Overflow用户

发布于 2016-04-23 00:14:58

代码语言:javascript
复制
    echo "US/Central - 10:26 PM (CST)" | sed -n "s/^.*-\s*\(\S*\).*$/\1/p"

-n      suppress printing
s       substitute
^.*     anything at the beginning
-       up until the dash
\s*     any space characters (any whitespace character)
\(      start capture group
\S*     any non-space characters
\)      end capture group
.*$     anything at the end
\1      substitute 1st capture group for everything on line
p       print it
票数 127
EN

Stack Overflow用户

发布于 2012-11-14 16:01:58

快速脏、无正则表达式、低健壮性的斩波技术

代码语言:javascript
复制
string="US/Central - 10:26 PM (CST)"
etime="${string% [AP]M*}"
etime="${etime#* - }"
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13373249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档