2016-05-19 4 views
1

に変換しかし、例えば(私は多くのファイルで働いています。):FILE2grepが二つのファイル間で一致したと、私は次のような問題への迅速かつ効率的なアプローチを必要と下部ケース

私は2つのファイルを持っています

Hello 
Goodbye 
Salut 
Bonjour 

Hello, is it Me you're looking for? 

FILE1私は小文字にその単語をファイル2に存在するファイル2内の任意の単語を見つけ、その後、変換したいと思います。

私は実行して、ファイル内の単語をgrepすることができます。だから今、私は最終的な出力となるよう

hello 

に変換したい

grep -f file2.txt file1.txt 

をして

Hello 

を返します。 is

hello, is it Me you're looking for? 

は、私は複数のファイルをどこに一致した場合:

grep -f file2.txt *_infile.txt 

出力はそれぞれ別々のoutfilesに保存されます。

私はtrのようなものを使って小文字に変換できますが、私は大文字のすべてのインスタンスでこれを行う方法しか知りません。私は大文字から小文字への2つのファイル間の共通の単語を変換したいだけです。

ありがとうございました。

答えて

1

私は少し違った問題を解決します。

まず、grepで一致をマークします。 --color=alwaysはうまく機能しますが、検出にはやや面倒で潜在的に信頼性がありません。それから私はsedまたはperlでマークされたマッチを変更します

grep --color=always -F -f file2.txt file1.txt | \ 
    perl -p -e 's/\x1b.*?\[K(.*?)\x1b.*?\[K/\L\1/g' 

不可解なREが続いて右の試合後マッチ、デ着色エスケープシーケンスの前に着色エスケープシーケンスと一致し、グループ1に間のすべてをキャプチャ小文字の\L変換をキャプチャに適用します。おそらくGNU sedも同じことをすることができますが、おそらくperlはより移植性があります。

+0

ありがとう - 私はこれを行ったが、perlスクリプトの後の出力は、目的の単語が大文字ではなくオリジナルのテキストとwingdingsの混合物のように見える元のファイルではない。私はperlコマンドが特殊文字を挿入していると思う。 – brucezepplin

+1

マークとして使われる 'grep --color = always'は特殊文字を挿入している。 'perl'はそれらを削除し、マークされた場所を変換することになっています。私は(想定された)マークシーケンスを更新しましたが、それが十分に移植可能かどうかまだ分かりません。 'grep --color =常に-f file2.txt file1.txt |を実行してください。 | hexdump'と出力を表示します。おそらく、あなたのシステムは異なるエスケープシーケンスを使用してターミナル出力を色づけします。 – user3159253

+0

これは素晴らしい出力です - 私は 'U'を' L'に変更して小文字に変換しました。どうもありがとう。 – brucezepplin

関連する問題