문맥:파일의 다른 줄에서 여러 문자열을 찾으려면 grep을 사용합니까(즉, 줄 기반 검색이 아닌 전체 파일)?
egrep -nH 'Dansk|Norsk|Svenska' file3
또는 사용립그렙
rg 'Dansk|Norsk|Svenska' file3
하지만 답은 있다
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}END{ if (a && b && c) print $0 }' file3
난 이해가 안 돼요이것답변.
알겠어요 awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}
.
내 생각에 지금 문제는 awk를 사용하고, 패턴 일치 시 출력 라인을 사용하여 라인 번호를 인쇄하는 것입니다.
업데이트: 나도 알겠어이것답변. 업데이트:
거의 종료됨:
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print $0; next}1' file3
그것은 돌아온다
Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,
기대수익률은
Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
file3
콘텐츠:
Disc Title: unknown
Title: 01, Length: 01:33:37.000 Chapters: 33, Cells: 31, Audio streams: 04, Subpictures: 20
Subtitle: 01, Language: ar - Arabic, Content: Undefined, Stream id: 0x20,
Subtitle: 02, Language: bg - Bulgarian, Content: Undefined, Stream id: 0x21,
Subtitle: 03, Language: cs - Czech, Content: Undefined, Stream id: 0x22,
Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,
(...)
고쳐 쓰다. 거의 가깝습니다.
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print NR, $0}' file3
하지만 그것은 돌아온다
6 Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
7 Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,
8 (...)
답변1
awk는 한 쌍의 조건과 작업으로 구성됩니다. 조건 부분은 산술 표현식이나 패턴 일치 또는 하나 이상의 표현식의 결과일 수 있으며 모두 true 또는 false 문일 수 있습니다.
여기서 주어진 샘플은 한 쌍의 패턴 일치 및 작업을 사용합니다. 즉,
awk '/if-this-regex-exist-in-current-line/ { "yes, so do something" }' infile
3개 모두 동일한 패턴 일치를 수행하고 이러한 정규식이 한 줄에 있으면 임시 변수 플래그를 설정합니다.
그런 다음 입력 infile 파일의 모든 레코드/라인을 처리한 후 한 번만 실행되는 END{} 블록에서 모든 플래그가 설정되었는지 확인합니다(3개 패턴이 모두 발견되었거나 단일 패턴 패턴에서 발견되었음을 의미). ) 라인 또는 while 입력 파일에서) 그런 다음 인쇄합니다.마지막 줄(FILENAME 등을 인쇄하고 싶을 수도 있습니다) 입력 파일.
두 번째 추가 질문에 답하려면:
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print $0; next}1' file3
이는 Dansk
또는 Norsk
중 하나 이상을 포함하는 행을 인쇄하고, 그렇지 않으면 명령이 수행하는 모든 작업을 또는 Svenska
에 쓸 수 있는 행을 인쇄합니다 .awk 1 infile
cat infile
In은 x ||y ||z || ...
"x OR y OR z OR ... 중 적어도 하나가 True인 경우"를 의미하고, in은 x && y && z &&...
"x AND y AND z AND ... 모두가 True인 경우"를 의미하며 "true"를 의미합니다. true로 평가되는 표현식이나 조건의 결과입니다.