2016-08-23 18 views
0

ディレクトリ内の特定のテキストを見つけて、特定のテキストを含むファイルからその行を削除します。どのように私は、タスクを達成することができディレクトリ内の特定のテキストを検索し、ファイルからその行を削除します

  1. 今、私は2つの質問がありますか?

  2. 何が問題なのですか?私は以下の方法を試みたが失敗した。詳細は以下の通りです:

    grep -rnw "./" -e "webdesign"

    をこれがパターン「ウェブデザイン」で、現在のディレクトリを検索し、私は結果を得る:

     
    .//pages/index.html:1:{% load webdesign %} 
    .//pages/pricing.html:1:{% load webdesign %} 
    .//prototypes.py:16:  'django.contrib.webdesign', 
    

    それから私はdoesnのその、それらのファイルから行を削除するsedを使用します

     
    sed -i "/webdesign/d" ./pages/index.html 
    or 
    sed "/webdesign/d" ./pages/index.html > ./pages/index.html 
    

私のソフトウェア環境:「トンの仕事は、唯一の空のファイルを(私はそれが私のすべてのファイルの内容を消去する意味)を取得しますMENTがある:OS Xヨセミテ、Macのターミナル、バッシュ

+0

'sed -i"/webdesign/d "。/ pages/index.html'は、あなたが望むものを正確に行うべきです。 –

+0

@ Jean-FrançoisFabre:Macの 'sed'は' -i'をサポートしていません。 – choroba

+0

このコマンドを実行すると、ファイル内の空のコンテンツのみが表示されます。@ Jean-FrançoisFabre – soarinblue

答えて

1

のbashのループはスペースとは、ファイル名が存在しないことを提供するトリックを行います(その場合には、他のソリューションが可能ですが、これが最も簡単です)

for i in `grep -lrnw "yourdirectory/" -e "webdesign"` 
do 
    sed "/webdesign/d" $i > $i.tmp 
    # safety to avoid destroying the file if problem arises (disk full?) 
    if [ $? = 0 ] ; then 
     mv -f $i.tmp $i 
    fi 
done 
それは webdesignが含まれており、それは同様に変更されます:) chorobaへ

感謝をので、あなたが現在のディレクトリにこのスクリプトを見つけてはならない

ノートでは、私が望んだよう-iオプションが機能しないことを知っています。しかし、それは別の意味を持っているか、optパーサによって拒否されます。それはサフィックスと関係がありますが、今は問題ではありませんが、最初は問題を見るのが難しいです。 -iを指定しないと、インプレースでファイルを操作することはできません。出力を入力にリダイレクトするだけで入力ファイル(!)が破棄されます。そのため、あなたのソリューションはうまくいきませんでした。

+0

あなたの解決策が効果を発揮します。しかし、私のことは、なぜですか? – soarinblue

1

動作するはずですあなたは-iオプションをサポートしているのGNU sedの、そして

sed -i '/webdesign/d' files 

をインストールすることができます。バックアップを作成するには、-i~を使用する方が安全です。

あなたは

sed /webdesign/d file > file 

が動作しない理由は、(あなたがそれから何かを読み取ることができる前に、それはファイルを上書きします)ですが、あなたはから読んでいる同じファイルに書き込むことはできません。テンポラリファイルを作成する

sed /webdesign/d file > file.tmp 
mv file.tmp file 
+0

より具体的に言えば、 'foo file> file'で出力リダイレクションはシェルによって行われます。シェルはまず' file'を書き込み用に開き、次に 'foo file'を実行してstdoutを開いたファイルにリダイレクトします。書き込みのために 'file'を開くと既存のコンテンツは削除されるので、' foo'が起動するまでには既に空です。 – melpomene

+0

私はあなたのやり方を試しました。これは私の2番目の質問を解決します。どうもありがとう! @チョロバ。 – soarinblue

関連する問題