幼稚園時代「何組」でしたか?

こんにちは。

テキストファイルA.txtに、検索したい文字列を1行ずつ入れておき、別のテキストファイルB.txtのうち、A.txtにある文字が含まれている行を削除するという作業をしたいです。
例えば
A.txt
AAA
BBB

B.txt
hoge
hogeAAAhoge
hogeBhoge
hogeBBBhoge

の場合、
hoge
hogeBhoge
を出力させたいです。

このような処理ができる方法はないでしょうか?(コマンドやプログラム等)

A 回答 (4件)

fgrep -v -f A.txt B.txt

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
fgrepでやったらできました。
しかし、下の方のお礼でも書いたように、パターンと重複している行も出力されてしまいます。
たぶんパターンの中に正規表現と同じ意味となる【+】が入っていることが原因かなと思うのですが、正規表現ではなく、ただの記号として【+】を表すようにすることは可能でしょうか?
もし何かわかることがあれば教えて頂きたいです。

お礼日時:2015/01/15 12:51

>具体例としては色々あるのですが、「たった+タッタ+70+jd籐+トー+2」という文字列です。



全然具体例じゃ無いのですが。

A.txtにこういう文字列を入れて、B.txtにこういう文字列を入れて、fgrep -v -f A.txt B.txt すると、こういう文字列が予想外に表示される。

と書いてくれないと、例になってません。

>・A.txt、B.txtの文字コードはシフトJISです。

cygwinは使ってないのでわかりませんが、シフトJIS対応していないと文字によっては駄目かも。
両方のファイルをUTF-8にして試してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>cygwinは使ってないのでわかりませんが、シフトJIS対応していないと文字によっては駄目かも。
>両方のファイルをUTF-8にして試してみてください。
両方のファイルの文字コードをEUCにしたら、無事重複しない行のみが検出できました。

また、前回の回答で具体例の書き方が不十分であったこと、大変申し訳ありませんでした。
本来ならば各テキストファイルの内容を書くべきでしたが、テキストファイルの内容が2万5千行近くあったので書くのを省略させていただき、出力結果で重複してしまっているもののうち1つだけを書かせていただきました。

何度も回答いただき、大変助かりました。
本当にありがとうございました。

お礼日時:2015/01/20 11:21

No2です。



fgrep は正規表現を扱えない(すべてそのままの文字として単純検索)なので、特殊文字の影響はありません。

>パターンと重複している行も出力されてしまいます

考えにくいです。何らかの勘違いだと思います。
具体的にどういう文字列ですか?現象の見られる具体例を書いてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お返事が遅くなってしまい申し訳ありません。

再度、fgrep -v -f A.txt B.txt の出力結果を見てみたのですが、やはり重複する行も出力されてしまっています。
具体例としては色々あるのですが、「たった+タッタ+70+jd籐+トー+2」という文字列です。
パターン(A.txt)もB.txtも、上の例のように文字列・記号・数字で構成されているものがほとんどです。

また、あまり関係ないかもしれませんが、
・fgrepの出力を「> output.txt」のようにファイルで出力しています。
・PCはwindows7(64bit)、fgrepのコマンドはcygwinで行っています。
・A.txt、B.txtの文字コードはシフトJISです。


何かわかりましたら、また教えて頂きたいです。
よろしくお願いいたします。

お礼日時:2015/01/19 10:24
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
grep -v -f A.txt B.txtでやると、
【 [ または [^ が不一致です】というエラーが出てしまい困っていたのですが、fgrepでやってみたらできました。
ただ、重複しない行を出力したはずなのに、なぜか結果として出力された文字列をB.txt内で検索すると見つかります・・・。
パターンの中に数字や記号(+、/、<など)が入っているのですがそれが原因でしょうか?
もし何かわかりましたらまた教えて頂けると助かります。

お礼日時:2015/01/15 12:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報