2017-04-15 4 views
2

ドット間にランダムなデータを含む2つのドットのみを含むすべての行を削除するにはどうすればよいですか?一部の行には3つ以上のドットがあり、ファイルに残す必要があります。私はsedを使いたいです。ドット間に文字を含む2つのドットを含む行を削除する

例ダーティファイル:

.dirty.dig 
.please.dont.delete.me 
.delete.me 
.dont.delete.me.ether 
.nnoooo.not.meee 
.needto.delete 

所望の出力:

.please.dont.delete.me 
.dont.delete.me.ether 
.nnoooo.not.meee 

答えて

0

が、私は二重チェックに便利なsedを持っていないが、

/^[^.]*\.[^.]*\.[^.]*$/d 

が前に、それらの間の非ドット文字列で2つのドットを持つすべての行と一致し、削除する必要があります。

2

は、入力フィールドの数は、これが保持する3

  • に等しくないawkここ

    $ awk -F. 'NF!=3' ip.txt 
    .please.dont.delete.me 
    .dont.delete.me.ether 
    .nnoooo.not.meee 
    
    • -F.使用.プリントNF!=3
    • 区切り文字としてすべての行を使用する方が簡単だろう線のようなもの abc.xyz
    • これは(GNUのSED)あなたのために働くかもしれないawk -F. 'NF>3' ip.txt
+0

は、私のデータはinterfearingたラインの両端に、いくつかのハイフンを持っていた、これは実際には非常に適しています。 – derpderpalert

0

を使用し、以上の2点と線のみを保持する:

sed 's/\./&/3;t;s//&/2;T;d' file 

3以上.印刷がある場合。 2 .がある場合。そうでなければ印刷します。

別の方法:

sed -r '/^([^.]*\.[^.]*){2}$/d' file 
+0

'-r'はGNU sedでしか動作しませんが、' -E'はGNUとOSX sedsの両方で動作するので、 '-E'を使うと' -r'を使うより移植性が高くなります。 –

+0

私は手でそれを実行すると素晴らしい動作しますが、bashスクリプトからは動作しません。 – derpderpalert

+0

お詫び申し上げますが、私のデータには、絡み合っていた行末にハイフンがいくつか表示されていましたが、これは実際にはうまく機能します。 – derpderpalert

0

はsedのは、ちょうどG lobally Rを検索するには、置換を作成するためのものです egular E XPRESSIONとP RINT設計された全体の他のツールがあります結果その目的のためにちょうどそれにちなんで命名された - grep

grep -v '^[^.]*\.[^.]*\.[^.]*$' file 

かのERE用のGNU grepを持つ:私は謝罪

$ grep -Ev '^[^.]*(\.[^.]*){2}$' file 
.please.dont.delete.me 
.dont.delete.me.ether 
.nnoooo.not.meee 
+0

また、bashスクリプトから試してみるまで、うまくいきます。 – derpderpalert

+1

謝罪しました。私のデータには、絡み合っていた行末にハイフンがいくつか表示されていましたが、これは実際にはうまく機能します。 – derpderpalert

関連する問題