Shell 正则表达式到行尾

2024-04-02

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

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

该文件中某处的注释中有一个“变量”。我想在 Shell 脚本中使用正则表达式获取值。

到目前为止我的代码:

#!/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/ https://regex101.com/,但 Shell 正则表达式解释器似乎不同于pcre and python.

我最好的解决方案是找到mode= and 一切在它之后。那么有没有办法只获取值呢?开始很容易......找到mode=。但我怎么说 shell 正则表达式来把一切都抛在身后mode= until下一个换行符?和不超过这个换行符?
一些与\n(unix 换行符)和$(字符串结尾)对我不起作用:(

谢谢您的帮助,
问候


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

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

Output:

dev

Regex $'mode=([^\n]*)'将匹配文字文本mode=后跟 0 个或多个非任意字符\n.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell 正则表达式到行尾 的相关文章

随机推荐