我有一个类似于这个小例子的文件:
# ...
# 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/ 进行测试,但似乎Shell正则表达式解释器与pcre
和python
不同。
我的最佳解决方案是找到mode=
并获取后面的所有内容。所以有没有办法只获取值?开始很容易......查找mode=
。但是如何告诉shell正则表达式获取mode=
之后的所有内容,直到下一个换行符,并且不要超出这个换行符?
使用\n
(unix换行符)和$
(字符串结尾)对我没有起作用:(
谢谢帮忙,
问候
mode=[^\n]+
,其中[^\n]
匹配任何不是换行符的字符。此外,在 [tag:Shell] 中是否需要设置修饰符? - SierraOscar\n
吗? - toddeTVmode=[^\r\n]
替代,这样可以避免回车换行的问题。 - SierraOscar