我想找到?[A-Za-z0-9]?的所有实例--任何和所有被两个问号包围的文本,并突出显示问号本身,而不是文本中的文本。
查找:
?North America?找不到
Is anyone there?发布于 2014-11-25 11:16:08
通过grep,
grep -Po '\?.*?\?' file或
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发布于 2014-12-06 19:42:15
下面是在问号之间高亮单词的一种方法:
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;输出:

https://stackoverflow.com/questions/27125083
复制相似问题