1

刚才我正在寻找一个正则表达式,它将检测未用双引号括起来的字符串。我得到了很好的答案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 正则表达式与普通正则表达式有何不同。如何才能做到这一点?请帮忙。请参阅此链接:http ://regexr.com?31eg3相同

4

3 回答 3

3

两件事,首先你需要引用整个字符串来回显,或者 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,所以很清楚匹配的内容。

于 2012-07-04T08:46:29.537 回答
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'
于 2012-07-04T08:42:59.460 回答
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 提示,否则它只会显示整个字符串,匹配项以其他颜色突出显示。

于 2012-07-04T08:42:07.113 回答