我有一个像这个小例子的文件:
# ...
# 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正则表达式插件与pcre
和python
不同。
我最好的解决方案是在其后找到mode=
和一切。那么有没有办法只获得价值?一开始很容易......找mode=
。但是我怎么说shell正则表达式让mode=
的所有内容落后于下一个换行符? 不超出这个换行符?
\n
(unix linebreak)和$
(字符串结尾)的内容对我不起作用:(
感谢您的帮助,
问候
答案 0 :(得分:1)
您可以使用此正则表达式来获得匹配:
conf=$(<"/etc/test.conf")
regex=$'mode=([^\n]*)'
[[ $conf =~ $regex ]] && echo "${BASH_REMATCH[1]}"
<强>输出:强>
dev
正则表达式$'mode=([^\n]*)'
将匹配文字文本mode=
,后跟0个或更多不是\n
的任何字符。