с perl:
uniq -c file | perl -lne 'if (m(^\s*(\d+) (.*)$)) {print $2 if $1 % 2 == 1}'
Регулярным выражением для символа пробела, конечно же, является \ s
. Однако, поскольку вам нужен непробельный символ, вы можете использовать \ S
! Следовательно, ваше регулярное выражение, которое нужно заменить, будет \ S \ n \ r \ S
.
РЕДАКТИРОВАТЬ:
#!/usr/bin/perl
use strict; use warnings;
my $pattern = "xxxxxxxxxxxxxxxxxxxy\n\ryxxxxxxxxxxxxxxxxxxx \n\r xxxxxxxxxxxxxxxxxxxy\n\ryxxxxxxxxxxxxxxxxxxx";
$pattern =~ s/(\S)(\n\r)(\S)/$1$3/g;
print "$pattern\n";
exit;
результат:
xxxxxxxxxxxxxxxxxxxyyxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxyyxxxxxxxxxxxxxxxxxxx
Я заменил регулярное выражение на $ 1 $ 3
, чтобы вы сохранили символы, которым соответствует \ S
.
Вот способ с помощью GNU awk. Установите разделитель записей RS
в соответствии с разделителями, которые вы хотите сохранить, и удалите другие \r\n
последовательности.
gawk -vRS=' \r\n ' '{gsub(/\r\n/, ""); printf "%s%s", $0, RT}'