파일에서 패턴과 일치하는 줄 선택 및 삭제

파일에서 패턴과 일치하는 줄 선택 및 삭제
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

관련 정보