ターミナルを介して特定の単語を含むテキストファイルから行を削除する方法


72

「cat」と「rat」という単語を含むテキストファイルからすべての行を削除する方法


これは宿題のように思われます。Askubuntuの素敵な人々にあなたの答えを帰属させることを忘れないでください。
zwets

それは大きなプロジェクトの一部であり、Linux環境は初めてです。
PersonX

回答:


100

grep アプローチ

「cat」または「rat」に一致する行を含まないファイルのコピーを作成するにはgrep、逆(-v)および全語オプション(-w)を使用できます。

grep -vwE "(cat|rat)" sourcefile > destinationfile

全単語オプションは、それが一致しないと確信してますcatsgrateful例えば。シェルの出力リダイレクトを使用して(>)シェルを新しいファイルに書き込みます。構文の-E拡張正規表現を有効にするオプションが必要(one|other)です。

sed アプローチ

別の方法として、インプレースで行を削除するには、次を使用できますsed -i

sed -i "/\b\(cat\|rat\)\b/d" filename

\bセットワード境界及びd動作はスラッシュの間の発現と一致する行を削除します。catそして、ratの両方で一致している(one|other)、我々は明らかにバックスラッシュでエスケープする必要があります構文。

ヒント:ファイルを上書きする前にコマンドの出力をテストするsedには、-i演算子なしで使用します。

Sedに基づく-特定の文字列を含む行を削除する


ソースファイルからの削除と一致するファイルの生成の両方を実現する方法があるのだろうか。おそらくそうではありませんが、役に立つでしょう(たとえば、サイズが大きくなりすぎているファイルを取得した場合、コンテンツに基づいて分割します)。
スリダールサルノバト

1
@ Sridhar-Sarnobatああ、できます。Tシャツとサブシェルを使用してstdoutをコピーします。一方ではフィルタリングし、他方では逆にします。ティーとサブシェルの使用は、ここで示された無関係なユースケースで実証:blog.g3rt.nl/...
gertvdijk

15

ターミナルのみでテストするには、次を使用します。

sed '/[cr]at/d' file_name

これらの行を実際にファイルから削除するには、次を使用します。

sed -i '/[cr]at/d' file_name


0

あなたが持つファイルがある場合を検討file_nameし、マウスのためではなく、同時にマウスからの数行は以下のように他の単語を持つ上で検索するcatrat、あなたの出力のものを表示したくないので、それを行うための一つの方法です-

grep -r mouse file_name | grep -vE "(cat|rat)"

0

ポータブルシェルウェイ

で動作/bin/shしている、dashUbuntuの上で、同様にksh、とbashcaseステートメント内の各単語に対して複数のテストケースを作成する必要があるが、移植性があることは少し厄介です。単語が行の最初、行の最後、または行の途中で単独で表示され、別の単語の一部である可能性がある場所を無視する場合に機能します。

#!/bin/sh
line_handler(){
   # $1 is line read, prints to stdout
    case "$1" in
        cat|cat\ *|*\ cat\ *|*\ cat) true;; # do nothing if cat or rat in line
        rat|rat\ *|*\ rat\ *|*\ rat) true;; 
        *) printf "%s\n" "$1"
    esac
}

readlines(){
    # $1 is input file, the rest is words we want to remove
    inputfile="$1"
    shift

    while IFS= read -r line;
    do
        line_handler "$line" "$@"
    done < "$inputfile"
    [ -n "$line" ] && line_handler "$line" 
}

readlines "$@"

そして、これはそれがどのように機能するかです:

$ cat input.txt                                                                                                                                                        
the big big fat cat
the cat who likes milk 
jumped over gray rat
concat 
this is catchy
rat
rational
irrational
$ ./dellines.sh input.txt                                                                                                                                              
concat 
this is catchy
rational
irrational
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.