ファイル内のパターンに一致する行の選択と削除

ファイル内のパターンに一致する行の選択と削除
grep -Eri "drucken" app/views

app/views/meths/_form.html.erb:                                <li class="hidden-phone"><a onclick="javascript: print();" class="">Methode drucken</a></li>
app/views/clients/show.html.erb:                    <li><a onclick="javascript: print();" class="" value="drucken">drucken</a></li>
app/views/clients/index.mobile.html.erb:                                <li class="hidden-xs"><a onclick="javascript: print();" class="">KlientInnen drucken</a></li>
app/views/treatments/index.html.erb:                        <li><a onclick="javascript: print();" class="" value="drucken">drucken</a></li>

次のタスクを実行できるソリューションを探しています。

grep -Eri "drucken" app/views | xargs INTO_A_FANCY_TOOL_WHICH_REMOVES_THOSES LINES

修正する:

ファイルからこの行を削除したいと思います。

答え1

次のことを試してみましたか?

grep -Eri -l "drucken" app/views | xargs sed -e '/drucken/d' -i

"-l"はgrepにファイル名のみを印刷するように指示し、"-i"はsedにファイルを動的に変更するように指示します。

または、sedを使用してすべてのファイルを繰り返すことができますが、要求された単語が含まれていなくても、すべてのファイルを「接触」します。

find app/views -type f -exec sed -e '/drucken/d' -i {} \;

答え2

探しているようですがgrep -v

  -v, --invert-match
         Invert the sense of matching, to select non-matching lines.  (-v
         is specified by POSIX.)

したがって、この行が削除されたgrep -v 'drucken' file1 > file2行が提供されますfile2

または試していないもの

sed -e '/drucken/d' infile > outfile

答え3

これを達成するためにPerl onelinerを使用することができます。

$ cat file
a
b
c
$ perl -i -wne 'if(/b/){print STDOUT $_}else{print}' file
b
$ cat file
a
c

関連情報