Shell正则表达式结束

时间:2015-10-05 15:43:25

标签: regex shell

我有一个像这个小例子的文件:

# ...
# mode=dev
# ...

在此文件的某处,评论中有一个“变量”。我想在Shell脚本中使用regex获取值。

到目前为止我的代码:

#!/bin/bash
conf=$(<"/etc/test.conf") # Get the file content
regex='mode=(.*)$' # Set a regex
if [[ $conf =~ $regex ]]; then # Search for the regex in the file
    # We found it, so ...
    echo "${BASH_REMATCH[1]}" # ... here is the value
fi  

我的大问题是,它找不到值:(
我尝试了很多不同的正则表达式,并使用https://regex101.com/对它们进行了测试,但似乎Shell正则表达式插件与pcrepython不同。

我最好的解决方案是在其后找到mode=一切。那么有没有办法只获得价值?一开始很容易......找mode=。但是我怎么说shell正则表达式让mode= 的所有内容落后于下一个换行符不超出这个换行符?
\n(unix linebreak)和$(字符串结尾)的内容对我不起作用:(

感谢您的帮助,
问候

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式来获得匹配:

conf=$(<"/etc/test.conf")
regex=$'mode=([^\n]*)'
[[ $conf =~ $regex ]] && echo "${BASH_REMATCH[1]}"

<强>输出:

dev

正则表达式$'mode=([^\n]*)'将匹配文字文本mode=,后跟0个或更多不是\n的任何字符。