我想提取配置的过滤规则/etc/lvm/lvm.conf
, like filter = [ "r|/dev/sda|" ]
。我想sed
回来"r|/dev/sda|"
。所以我尝试了以下脚本:
echo ' filter = [ "r|/dev/sda|" ] ' | sed -r 's:^\s*filter\s*=\s*\[\s*([^\s]+)\s*\]:\1:g'
但是没用,脚本又返回了filter = [ "r|/dev/sda|" ]
。
我已经尝试了一些在线正则表达式测试器,该组已正确匹配。
但是,如果我更换[^\s]+
by .+
, 有用。
Doesn't [^\s]+
mean 多个非空白字符 ?
有什么想法吗?
Acc. to 正则表达式.info:
一个关键的语法差异是反斜杠不是 POSIX 括号表达式中的元字符。所以在 POSIX 中,正则表达式[\d]
匹配一个\
or a d
.
所以你需要更换[^\s]
with [^[:space:]]
(除空格之外的任何字符).
Example:
echo ' filter = [ "r|/dev/sda|" ] ' | sed -E 's:^\s*filter\s*=\s*\[\s*([^[:space:]]+)\s*\]:\1:g'
Output: "r|/dev/sda|"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)