一个正在使用grep的正则表达式

时间:2012-07-04 08:40:05

标签: regex grep

刚才我正在寻找一个可以检测未用双引号括起来的字符串的正则表达式。我得到了javascript中有效的答案。我实际上是尝试使用grep运行它,但它无法正常工作。任何人都可以帮助我为什么这个正则表达式不起作用

示例字符串:"quick" "brown" fox jumps "over" "the" lazy dog

我正在尝试运行:echo "quick" "brown" fox jumps "over" "the" lazy dog | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'

它没有输出。 Linux regex与普通正则表达式有何不同。如何才能做到这一点? 请帮忙。有关相同的

,请参阅此链接:http://regexr.com?31eg3

3 个答案:

答案 0 :(得分:2)

两件事,首先你需要引用整个字符串来回显,或者shell将双引号括起来。然后你使用perl风格的正则表达式,所以你需要告诉grep使用它们来匹配-P选项。

$ echo "quick" "brown" fox jumps "over" "the" lazy dog
quick brown fox jumps over the lazy dog
$ echo "quick" "brown" fox jumps "over" "the" lazy dog | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'
$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -e '(?<![\S"])([^"\s]+)(?![\S"])'
$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -P -o -e '(?<![\S"])([^"\s]+)(?![\S"])'
fox
jumps
lazy
dog

我在这里添加了-o,因此很清楚匹配的内容。

答案 1 :(得分:1)

查看echo的输出:

$ echo "quick" "brown" fox jumps "over" "the" lazy dog
quick brown fox jumps over the lazy dog

试试这个:

$ echo '"quick" "brown" fox jumps "over" "the" lazy dog'

答案 2 :(得分:0)

首先将字符串括在单引号中:

echo '"quick" "brown" fox jumps "over" "the" lazy dog'

user@machine:~$ echo '"quick" "brown" fox jumps "over" "the" lazy dog' 
"quick" "brown" fox jumps "over" "the" lazy dog

然后使用, 对PERL兼容的正则表达式使用-P选项。

echo '"quick" "brown" fox jumps "over" "the" lazy dog' | grep -P -o '(?<![\S"])([^"\s]+)(?![\S"])'
fox
jumps
lazy
dog

感谢@lynxlynxlynx获取-o提示,否则它只显示整个字符串,其中的匹配项以其他颜色突出显示。