从文件中选择并删除与模式匹配的行

从文件中选择并删除与模式匹配的行
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

相关内容