web-dev-qa-db-ja.com

AWKの逆正規表現?

特定の単語を含む行を除外しようとしています。正規表現は、スクリプトへのコマンドライン入力です。

$0 ~ regex {
//Do something.
}

入力例は次のとおりです。

**String** **number**
domain  1
domain  2
bla     3

したがって、上記の入力から、ユーザーは言うことができます-Word「ドメイン」を持つ行をフィルターで除外します。

私が試したこと:

regex = "\?\\!domain" 

(否定先読み)。

しかし、この正規表現はすべての行を除外しています。 Word「ドメイン」のある行だけではありません。

6
Venkat Teki

以下を含む指定された入力ファイルinputの場合:

domain
demesne

domainを含む行をフィルタリングするには:

$ awk '/domain/ { print }' input
domain

行をフィルターするにはnotdomainを含む:

$ awk '!/domain/ {print }' input
demesne

行全体ではなくfieldに基づいてフィルタリングする場合は、新しく指定されたinputファイルに対して次のことを試すことができます。

example www.example.com
exemplar www.example.net

最初のフィールドcontainsexampleの行を除外するには:

$ awk '$1 !~ /example/ { print }' input
exemplar www.example.net

あなたの質問では、$0これは、最初のフィールドではなく行全体です。

8
DopeGhoti