2011-03-11 15 views
-1

これは、重複だけでなく、繰り返されるテキストファイル内のすべての行を消去することを意味します。私は、複製された行と複製された行の両方を意味します。これは、繰り返されなかった行のリストだけを私に残すでしょう。おそらく正規表現がノートパッド++でこれを行う可能性がありますか?しかし、どちら?その他の方法は?テキストファイルから両方の重複(重複だけでなく)を削除しますか?

+0

プログラミング言語はインストールされていますか?このようなタスクの言語を「スクリプト化する」ことが望ましい。そうなら、どの言語。あなたの好みの言語であるもののうち? –

答えて

3

UNIX系のシステムの場合は、uniqコマンドを使用できます。

同様の行が隣接していることに注意してください。そうでない場合は、ファイルを最初にソートする必要があります。

[email protected]:~$ cat test.file 
ezra 
john 
ezra 
user 
[email protected]:~$ uniq -u test.file 
ezra 
john 
ezra 
user 
[email protected]:~$ sort test.file | uniq -u 
john 
user 
+0

あなたがいないなら、私はcygwinを提案します。 – zebediah49

+0

GnuWinも優れています。 – Ezra

1

あなたは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'

+0

'(?:^ |(?<= \ n)) 'という式は、' m '"複数行 "モードがオンの場合には、単に'^'に簡略化することができると思います。 – ridgerunner

+0

ありがとうございました。どのような正規表現エディタをお勧めしますか?私はeditpad pro、regex buddy、notepad ++を持っています。また、これらのエディタでこの式の入出力を取得する方法。私は3人でそれらを書きましたが、明らかに私が何をしているのかわかりません。スプリットスクリーンを有効にするものは素晴らしいでしょう。 (dreamweaverのようなビットです) – user656022

+0

@ridgerunner - はい、 's /^..// mg'だけ使うことができますが、時にはマルチラインモードを説明することはしばしば頭痛です。 – sln

関連する問題