Jae*_*ark 3 regex string bash perl
这是一个正则表达式的问题,但我在Wiki页面找不到适合我的案例的选项,所以我决定在这里问一下.可能是一个简单的未知选项正则表达式可以解决我的情况.
我有一个日志文件(a.txt),它有多行字符串.我想比较每两行(第1和第2,第3和第4 ......)并将匹配的字母(不是字符串)替换为"."(或任何特殊字符).
A.TXT:
1100110010
1100101100
0011001100
0110101111
.
.
.
Run Code Online (Sandbox Code Playgroud)
的Result.txt:
.....1001.
.....01100
.0.10...00
.1.01...11
.
.
.
Run Code Online (Sandbox Code Playgroud)
这可能是两个字符串的XOR问题,所以我尝试了这种方式,但它需要转换为ASCII然后XOR是可行的(可能这种方法不对).我认为有一种非常简单的方法可以用SED/PERL完成这项工作.任何建议和/或指导表示赞赏.感谢您阅读我的问题.
使用按位运算符的 Perl :
#!/usr/bin/env perl
use strict;
use warnings;
use v5.10;
while ( !eof(DATA) ) {
chomp( my $line1 = <DATA> );
chomp( my $line2 = <DATA> );
( my $uniq_mask = $line1 ^ $line2 ) =~ s/[^\0]/\xFF/g;
my $uniq1 = $line1;
my $uniq2 = $line2;
for ( $uniq1, $uniq2 ) {
$_ &= $uniq_mask;
s/\0/./g;
}
say for $line1, $line2, $uniq1, $uniq2, '';
}
__DATA__
1100110010
1100101100
0011001100
0110101111
Run Code Online (Sandbox Code Playgroud)
输出:
1100110010
1100101100
.....1001.
.....0110.
0011001100
0110101111
.0.10...00
.1.01...11
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |