![将匹配的文本附加到该行](https://linux22.com/image/114153/%E5%B0%86%E5%8C%B9%E9%85%8D%E7%9A%84%E6%96%87%E6%9C%AC%E9%99%84%E5%8A%A0%E5%88%B0%E8%AF%A5%E8%A1%8C.png)
假设我有一个名为 Sample.txt 的文件,其中包含
ab
bc
ac
grep -E "^b|c$" sample.txt
给我输出为
bc
ac
现在我希望将过滤器字符串添加到输出中。我想要的输出为
bc,b
ac,c
我怎样才能做到这一点?
答案1
和pcregrep
:
$ pcregrep --om-separator=, -o -o1 -o2 '^(b).*|.*(c)$' sample.txt
bc,b
ac,c
答案2
珀尔替代解决方案:
perl -nle 'print "$_,$&" if /^b|c$/' sample.txt
输出:
bc,b
ac,c
$_
- 指正则表达式匹配的字符串$&
- 返回整个匹配的子字符串
与外部珀尔脚本:
my.pl:
#!/usr/bin/perl
use strict;
use warnings;
while (<>) {
chomp $_;
print "$_,$&\n" if /(^b|c$)/;
}
用法:
perl my.pl sample.txt