外壳脚本。如何使用正则表达式提取字符串

阿希姆

我是Shell脚本的新手。我想使用curl发送一个http请求,然后使用正则表达式提取一些字符串。例如,如何从http响应中提取域名?(该示例仅用于学习目的)

#!/bin/bash
name=$(curl google.com | grep "www\..*com")
echo "domain name is"
echo $name
数字创伤

使用bash正则表达式

re="http://([^/]+)/"
if [[ $name =~ $re ]]; then echo ${BASH_REMATCH[1]}; fi

编辑-OP要求提供语法解释。正则表达式语法是一个很大的主题,我在这里无法完整解释,但是我将尽力进行解释以理解该示例。

re="http://([^/]+)/"

这是存储在bash变量中的正则表达式,re即要与输入字符串匹配的内容,并希望提取子字符串。分解:

  • http:// 只是一个字符串-输入字符串必须包含此子字符串以使正则表达式匹配
  • []通常使用方括号说“匹配括号内的任何字符”。因此,c[ao]t将同时匹配“ cat”和“ cot”。^该范围内的字符[]修改是这样说的“匹配任何字符,除了那些在方括号内。因此,在这种情况下,[^/]将除了匹配任何字符‘/’。
  • 方括号表达式将仅匹配一个字符。+其末尾添加a表示“匹配前面的子表达式中的1个或多个”。因此,[^/]+匹配所有字符集中的1个或多个,但不包括“ /”。
  • ()在子表达式周围加上括号表示您要保存与该子表达式匹配的任何内容以供以后处理。如果您使用的语言支持此功能,它将提供某种机制来检索这些子匹配项。对于bash,它是BASH_REMATCH数组。
  • 最后,我们对“ /”进行完全匹配,以确保我们一直匹配完全限定域名和以下“ /”的结尾

接下来,我们必须针对正则表达式测试输入字符串,以查看其是否匹配。我们可以使用bash条件来做到这一点:

if [[ $name =~ $re ]]; then
    echo ${BASH_REMATCH[1]}
fi

在bash中,[[ ]]指定扩展条件测试,并可以包含=~bash正则表达式运算符。在这种情况下,我们测试输入字符串是否$name与正则表达式匹配$re如果匹配,则由于正则表达式的构造,我们保证将有一个子匹配(从括号开始()),我们可以使用BASH_REMATCH数组进行访问:

  • 该数组的元素0${BASH_REMATCH[0]}将是与正则表达式匹配的整个字符串,即“ http://www.google.com/ ”。
  • 此数组的后续元素将是子匹配的后续结果。请注意,您可以()在正则表达式中包含多个子匹配项-BASH_REMATCH元素将按顺序与这些子匹配。因此,在这种情况下,${BASH_REMATCH[1]}将包含“ www.google.com”,我认为这是您想要的字符串。

请注意,BASH_REMATCH数组的内容仅适用于最后一次使用正则表达式=~运算符的时间因此,如果继续进行更多的正则表达式匹配,则每次都必须保存该数组中所需的内容。

这似乎是一个冗长的描述,但是我确实掩盖了一些正则表达式的复杂性。它们可能非常强大,并且我相信它们的性能不错,但是正则表达式语法很复杂。正则表达式的实现也各不相同,因此不同的语言将支持不同的功能,并且语法可能会有细微的差异。特别是在正则表达式中转义字符可能是一个棘手的问题,尤其是当那些字符在给定语言中具有其他含义时。


请注意$re,您可以将正则表达式直接放入条件中,而不必在单独的行上设置变量并在条件中引用此变量。但是在bash 3.2中,更改了有关是否需要在这些文字正则表达式周围加上引号的规则。将正则表达式放在单独的变量中是解决此问题的一种直接方法,因此该条件在支持=~match运算符的所有bash版本中均按预期工作

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

外壳脚本。如何使用正则表达式提取字符串

来自分类Dev

如何使用正则表达式从列表中提取字符串匹配项?

来自分类Dev

如何使用正则表达式提取字符串的各个部分

来自分类Dev

如何使用正则表达式提取字符串到行尾

来自分类Dev

如何使用正则表达式提取字符串的不匹配部分

来自分类Dev

如何使用 PHP 正则表达式提取字符串

来自分类Dev

正则表达式提取字符串

来自分类Dev

正则表达式提取字符串

来自分类Dev

正则表达式提取字符串

来自分类Dev

提取字符串正则表达式

来自分类Dev

使用正则表达式从字符串中的提取字符串

来自分类Dev

如何在正则表达式中提取字符串

来自分类Dev

scala.MatchError:使用正则表达式提取字符串

来自分类Dev

使用正则表达式提取字符串

来自分类Dev

使用正则表达式提取字符串

来自分类Dev

使用正则表达式提取字符串部分

来自分类Dev

Python使用正则表达式提取字符串的出现

来自分类Dev

使用正则表达式提取字符串中的数字

来自分类Dev

在间隔上使用正则表达式提取字符串html

来自分类Dev

在R中使用正则表达式从链接中提取字符串

来自分类Dev

使用正则表达式从URL提取字符串(在Data Studio上)

来自分类Dev

在Python中使用正则表达式提取字符串的特定部分

来自分类Dev

使用正则表达式提取字符串

来自分类Dev

使用正则表达式从HTML标签提取字符串

来自分类Dev

使用正则表达式从URL提取字符串

来自分类Dev

正则表达式使用ruby regex提取字符串

来自分类Dev

Java:使用正则表达式从输入中提取字符串

来自分类Dev

sed使用正则表达式提取字符串的结尾

来自分类Dev

使用正则表达式提取字符串

Related 相关文章

热门标签

归档