【发布时间】:2021-04-05 15:32:10
【问题描述】:
我想提取/etc/lvm/lvm.conf 中配置的过滤规则,例如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]+ 替换为 .+,它会起作用。
[^\s]+ 不是表示多个非空白字符?
有什么想法吗?
【问题讨论】:
-
这些简写不能在否定括号表达式中使用。
[^[:space:]]会起作用。 -
是的!谢谢,谢谢,非常感谢,@WiktorStribiżew
-
如果你对
grep没问题:试试grep -oP 'filter.*\K".*?"' inputfile -
@PS。
\K代表什么? -
这是
perl的说法,忽略\K之前的所有内容。 @vesontio