Поскольку вы спросили, как это сделать с помощью awk, Я думал, что докажу, что это не так уж и сложно. Итак, начнем:
echo "John Doe <john.doe@gmail.com> John Doe <johndoe@hotmail.net> Jane Doe <j.doe@outlook.org>" | \
awk \
'
{print repl($0)}
function repl(s, m)
{
if (match(s,"(<.)([^>]*)(.@.)([^>]*)(.\\.[a-z]*>)", m))
{
return substr(s, 1, RSTART-1) m[1] \
gensub(".","*","g",m[2]) m[3] \
gensub(".","*","g",m[4]) m[5] \
repl(substr(s,RSTART+RLENGTH))
}
else
return s
}
'
Как выясняется, виновником является tabbed
обычное расширение Perl. tabbed
затирает Ctrl -Влево/Вправо для перемещения текущей вкладки влево или вправо соответственно. Простое удаление вкладки из URxvt.perl-ext-common
устраняет проблему, но, конечно, также удаляет функциональность вкладки.
В итоге я решил создать локальную копию расширения tabbed
и использовать ее вместо версии по умолчанию. Сначала вы можете найти копию tabbed
вашей системы и скопировать ее в локальный каталог расширений. В моей 64-битной системе Ubuntu 18 файл находился в расположении команды cp
ниже. Эта команда, конечно, предполагает, что ~/.urxvt/ext/
уже существует.
cp /usr/lib/x86_64-linux-gnu/urxvt/perl/tabbed ~/.urxvt/ext/
Чтобы загрузить локальную копию вместо системной, удалите tabbed
из URxvt.perl-ext-common
(, которая загрузит версию по умолчанию ), и добавьте следующую строку.
URxvt.perl-ext: tabbed
В ~/.urxvt/ext/tabbed
найдите функцию tab_key_press
и измените ее, например, следующим образом:
sub tab_key_press {
my ($self, $tab, $event, $keysym, $str) = @_;
if ($event->{state} & urxvt::ShiftMask && !($event->{state} & urxvt::ControlMask) ) {
if ($keysym == 0xff51 || $keysym == 0xff53) {
my ($idx) = grep $self->{tabs}[$_] == $tab, 0.. $#{ $self->{tabs} };
--$idx if $keysym == 0xff51;
++$idx if $keysym == 0xff53;
$self->make_current ($self->{tabs}[$idx % @{ $self->{tabs}}]);
return 1;
} elsif ($keysym == 0xff54) {
$self->new_tab;
return 1;
}
}elsif ($event->{state} & urxvt::ControlMask && $event->{state} & urxvt::ShiftMask) {
if ($keysym == 0xff51 || $keysym == 0xff53) {
my ($idx1) = grep $self->{tabs}[$_] == $tab, 0.. $#{ $self->{tabs} };
my $idx2 = ($idx1 + ($keysym == 0xff51 ? -1 : +1)) % @{ $self->{tabs} };
($self->{tabs}[$idx1], $self->{tabs}[$idx2]) =
($self->{tabs}[$idx2], $self->{tabs}[$idx1]);
$self->make_current ($self->{tabs}[$idx2]);
return 1;
}
}
()
}
Эта версия функции заставит Ctrl -Shift -Влево/Вправо перемещать вкладки влево и вправо вместо Ctrl -Влево/Вправо. Но другая возможность — полностью удалить код для перемещения вкладок влево и вправо и жить без этой функциональности. Это можно сделать, удалив строку
if ($keysym == 0xff51 || $keysym == 0xff53) {
и следующие строки в конец пункта.