【发布时间】:2015-10-05 15:43:25
【问题描述】:
我有一个像这样的小例子的文件:
# ...
# 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= 和它之后的everything。那么有没有办法只获得价值?开始很容易......找到mode=。但是我如何说 shell 正则表达式来获得 mode= 直到 下一个换行符后面的所有内容?并且不超过这个换行符?\n (unix linebreak) 和 $ (end of string) 对我不起作用:(
感谢您的帮助,
问候
【问题讨论】:
-
尝试
mode=[^\n]+,其中[^\n]匹配不是新行的任何内容。另外,你必须在shell 中设置修饰符吗? -
我已经试过了,当我这样做时,他会写几行。然后
\n可能还有另一个换行符吗? -
可能是回车。试试
mode=[^\r\n]