같은 줄에 두 개의 패턴이 발견되면 해당 줄을 삭제하세요.

같은 줄에 두 개의 패턴이 발견되면 해당 줄을 삭제하세요.

input.txt텍스트 파일에서 두 개의 패턴( and)이 발견되면 텍스트 string1파일에서 한 줄을 삭제하고 싶습니다 (string2동일한좋습니다. 을 사용하세요 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이렇게 하면 순서에 관계없이 및 가 모두 포함된 행이 제거됩니다. string2포함된 행에서 을 찾을 때와 같이 겹칠 수도 있습니다 foobar.barbazfoobarbaz

-i위의 내용은 GNU 확장입니다. 또 다른 GNU 관련 솔루션1:

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

이식 가능한 경우 perl여기에서 사용할 수 있습니다.

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

^사용하지 마세요-i inplace현재 작업 디렉터리(as or)에서 확장 기능을 먼저 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의 주석은 블록 뒤에 쉼표가 필요하다는 점을 제외하면 grepPerl의 주석과 유사합니다 . 대신 메서드 호출을 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

위 코드는 foobarbazstring1과 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

관련 정보