コンテキスト:ファイルの異なる行で複数の文字列を検索するには、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 は一対の条件とアクションで構成されます。条件部分は、算術式またはパターンマッチング、または1つ以上の式の結果であり、すべてtrueまたはfalseステートメントです。
ここで与えられたサンプルは、一対のパターンマッチングと操作を使用します。つまり、
awk '/if-this-regex-exist-in-current-line/ { "yes, so do something" }' infile
3つすべてが同じパターンマッチングを実行し、これらの正規表現が1行にある場合は一時変数フラグを設定します。
次に、入力infileファイルのすべてのレコード/行を処理し、一度だけ実行されるEND {}ブロックですべてのフラグが設定されていることを確認します(3つのパターンがすべて見つかったか、単一パターンパターンで見つかったことを意味します)。 )行またはwhile入力ファイルから)その後、印刷します。最後の行(FILENAMEなどを印刷したい場合があります)入力ファイル。
2番目の追加の質問に答えるには:
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print $0; next}1' file3
これは、Dansk
またはNorsk
1つ以上を含む行を印刷し、それ以外の場合はコマンドが実行するすべての操作を書き込むことSvenska
ができる行を印刷します。awk 1 infile
cat infile
Inはx ||y ||z || ...
「x OR y OR z OR ...のうち少なくとも1つがTrueの場合」を意味し、inは「x && y && z &&...
x AND y AND z AND ...すべてがTrueの場合」を意味し、「true」を意味するします。 true と評価される式または条件の結果です。