使用纯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}}}' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |