Удалить оба дубликата (не только повторяющиеся) из текстового файла? - PullRequest
0 голосов
/ 12 марта 2011

Под этим я подразумеваю стирание всех строк в текстовом файле, которые повторяются, а не только дубликаты.Я имею в виду как строку, которая дублируется, так и дублированную строку.Это оставило бы меня только со списком строк, которые не повторялись.Возможно, регулярное выражение может сделать это в блокноте ++?Но какой?Любые другие методы?

Ответы [ 2 ]

2 голосов
/ 12 марта 2011

Если вы работаете в Unix-подобной системе, вы можете использовать команду uniq .

ezra@ubuntu:~$ cat test.file
ezra
ezra
john
user
ezra@ubuntu:~$ uniq -u test.file
john
user

Обратите внимание, что подобные строки соседние. Сначала вам нужно будет отсортировать файл, если это не так.

ezra@ubuntu:~$ cat test.file
ezra
john
ezra
user
ezra@ubuntu:~$ uniq -u test.file
ezra
john
ezra
user
ezra@ubuntu:~$ sort test.file | uniq -u
john
user
1 голос
/ 12 марта 2011

Если у вас есть доступ к регулярному выражению, которое поддерживает стиль PCRE, это просто:

s/(?:^|(?<=\n))(.*)\n(?:\1(?:\n|$))+//g

(?:^|(?<=\n))     # Behind us is beginning of string or newline
(.*)\n            # Capture group 1: all characters up until next newline
(?:               # Start non-capture group
    \1                # backreference to what was captured in group 1
    (?:\n|$)          # a newline or end of string
)+                # End non-capture group, do this 1 or more times

Контекст - это одна строка

use strict; use warnings;

my $str = 
'hello
this is
this is
this is
that is';

$str =~ s/
          (?:^|(?<=\n))
          (.*)\n
          (?:
              \1
              (?:\n|$)
          )+
  //xg;

print "'$str'\n";

__END__

вывод:

'hello
that is'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...