我想找到?[A-Za-z0-9]?
的所有实例 - 任何和所有被两个问号包围的文本,并突出显示问号而不是内部文本。
查找
?North America?
找不到
Is anyone there?
答案 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;
输出: