在grep中查找封闭的字符

时间:2014-11-25 11:11:24

标签: regex perl grep

我想找到?[A-Za-z0-9]?的所有实例 - 任何和所有被两个问号包围的文本,并突出显示问号而不是内部文本。

查找

?North America?

找不到

Is anyone there?

3 个答案:

答案 0 :(得分:2)

通过grep,

grep -Po '\?.*?\?' file

OR

grep -oE '\?[^?]*\?' file

仅突出显示问号。

grep -P '\?(?=[^?]*\?)|(?<=\?)[^?]*\K\?' file

示例:

$ cat fi
foo ?North America?
Is anyone there?
$ grep -P '\?(?=[^?]*\?)|(?<=\?)[^?]*\K\?' fi
foo **?**North America**?**

**?**表示突出显示的?标记。

使用下面的Perl命令用单引号替换包围的?标记。

perl -i -pe "s/\?(?=[^?]*\?)|(?<=\?)[^?]*\K\?/'/g" file

答案 1 :(得分:1)

echo 'foo?C?bar' | grep -Eo '\?[A-Za-z0-9]\?' | grep --color=auto '\?'

以突出显示的?

输出
?C?

答案 2 :(得分:1)

这是一种突出显示引号之间的单词的方法:

use warnings;
use strict;
use Term::ANSIColor;

my $bold=color("bold blue");
my $normal=color("reset");
my $str='?North America?
Hi ?aa ? aaa
Hello?
kkk?asad0098? a ?
';
$str =~ s/(\?[A-Za-z0-9]*\?)/$bold$1$normal/g;
print $str;

输出:

enter image description here