같은 줄에 두 개의 패턴이 있으면 행 삭제

같은 줄에 두 개의 패턴이 있으면 행 삭제

input.txt텍스트 파일에서 두 개의 패턴( string1string2)이 발견 되면 텍스트 파일( )에서 한 줄을 삭제하고 싶습니다.같은행, sed.

시도 중: sed -i "/\b\(string1\|string2\)\b/d" input.txt이지만 string1OR 이 포함된 행을 삭제하는 중입니다 string2.

답변1

sed -i "/string1.*string2\|string2.*string1/d" input.txt

이렇게 하면 string1이 string2 앞에 나타나거나 string2가 string1 앞에 나타나는 줄이 삭제됩니다. 줄을 삭제하려면 두 문자열이 어느 순서로든 줄에 있어야 합니다.

답변2

sed -ie '/string1/!b' -e '/string2/d' file.txt

순서에 관계없이 string1및 를 모두 포함하는 줄을 삭제합니다 ( 를 포함하는 줄에서 찾을 때와 같이 겹칠 수도 있음 ).string2foobarbarbazfoobarbaz

-i위는 GNU 확장입니다. 또 다른 GNU 관련 솔루션¹:

awk -i /usr/share/awk/inplace.awk '!(/string1/ && /string2/)' file.txt

아마도 perl여기에서 다음을 사용할 것입니다.

perl -ni -e 'print unless /string1/ && /string2/'

¹사용하지 마세요-i inplaceas 는 누군가 악성 코드를 심었을 수 있는 현재 작업 디렉터리에서 확장명(as 또는 )을 먼저 gawk로드하려고 시도합니다 . 와 함께 제공되는 확장 프로그램 의 경로는 시스템에 따라 다를 수 있습니다.inplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

답변3

사용라쿠(이전에는 Perl_6으로 알려짐)

~$ raku -ne '.put unless .match(/ foobar / & / barbaz / ) ;'   file

또는

~$ raku -ne '.put unless grep({ / foobar / & / barbaz / }, $_ ) ;'   file

위에는 Raku를 사용하여 OP 작업을 수행하는 두 가지 일반적인 방법이 있습니다. Raku의 메모는 블록 뒤에 쉼표가 필요하다는 점을 제외하면 Perl grep과 유사합니다 . 대신 메서드 호출을 grep사용할 수도 있으며 괄호 안에 .grep쓰는 것에 대해 걱정할 필요가 없습니다 .$_

위의 코드 예제는 두 개의 문자열을 포함하는 줄을 삭제합니다.순서와 관계없이 문자열이 겹치는지 여부에 관계없이.예를 들어:

샘플 입력:

1  foo
2  bar
3  baz
4  foobar
5  foobaz
6  barbaz
7  foobar foobaz
8  foobaz barbaz
9  foobar barbaz
10 foobar foobaz barbaz
11 foobaz barbaz foobar
12 barbaz foobar foobaz
13 foobarbaz

샘플 출력(위의 코드 예):

1  foo
2  bar
3  baz
4  foobar
5  foobaz
6  barbaz
7  foobar foobaz
8  foobaz barbaz

foobarbaz위 코드는 string1과 string2가 겹치는 13행을 포함하여 9~13행을 삭제합니다 . 정의된 순서로(겹치지 않고) 나타나는 문자열을 삭제해야 하는 경우 Raku에서도 그렇게 할 수 있습니다.

~$ raku -ne '.put unless m/foobar .* barbaz/;'  file

위에서는 9행과 10행을 제거합니다: foobar barbazfoobar foobaz barbaz.


Raku 정규식을 사용하면~할 수 있다:overlap(또는 :ov) 매개변수/부사를 사용하여 겹치는 두 문자열을 감지합니다 . 아래 첫 번째 링크를 참조하세요.


https://docs.raku.org/언어/regexes#Overlap
https://docs.raku.org/언어/regexes
https://raku.org

관련 정보