2016-09-03 12 views
0

最初の列にIPアドレスを持つ行のファイルを読み込もうとしています。regex(IPアドレス)で始まるAwkプリント行

以下のmyコマンドは値を返しません。

cat test.csv | awk '$1 == "^[[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}]" { print $0 }' 

正規表現でIPアドレスを取得できます。

cat test_1.csv | awk '$1~/^[[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\]/ {print $0}' 

のtest.CSV

1.1.1.1 ipaddress gateway 
2.2.2.2 ipaddress_2 firewall 
www.google.com domain google 
+3

regexをマッチングするために正規表現演算子 '〜'を使用してください。 '=='ではなく。また、 'awk'はファイルからの入力を読むことができます。 'cat'を使う必要はありません。単純に 'awk '$ 1〜/^regex /' file' – sat

+3

入力と出力の最小例を投稿してください。 – sat

+3

なぜあなたは '[...]'を正規表現の周りに置いていますか?おそらくここであなたが望んでいることはしません。 –

答えて

3

あなたはgrepでより簡単にそれを行うことができ、あまりにも下にしようとしました:

grep -P '^\d+(\.\d+){3}\s' test.csv 

または

あなたはGNU awk{1,3}(インターバル表現)を使用する場合
grep -P '^\d{1,3}(\.\d{1,3}){3}\s' test.csv 
+0

これがIPアドレスをフィルタリングするかどうか不明です。1.1.1.300はどうですか? –

+1

grepでは簡単ではなく、GNU grepでのみ動作します。 'awk' $ 1〜/^[0-9]{1,3}(\.[0-9]{1,3}){3}$/'test.csv'はPOSIX awkで動作します。 –

+0

@mona_sax、 'grep -P '^ \ d {1,3}(\。\ d {1,3}){3} \ s' <<" "1.1.1.300 asd" works ... – Sundeep

0

は、あなたがそれを可能にするために--re-interval(または)--posixオプションのいずれかを使用する必要があります。

使用:man awkから

awk --posix '$1 ~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/' file 

(OR)

awk --re-interval '$1 ~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/' file 

R {N、M}

つまたはかっこ内の2つの数字が示します区間式。 間隔式は、--posixまたは --re-intervalのいずれかがコマンドラインで指定されている場合にのみ使用できます。

+0

はこれらのオプションの一方または両方を有効にする設定がありますか? 'GNU Awk 4.1.3'のどちらのオプションも使わずに正常に動作します... – Sundeep

+0

@spasic、' GNU Awk 3.1.8'では動作しません。 'GNU Awk 4'では有効になっているかもしれません。 – sat

+0

オハイオ州オハイオ州..これは 'awk '/^[0-9]{1,3}(\.[0-9]{1,3}){3}\s/' file'とそれらの有無'GNU Awk 3.1.8'のオプション? – Sundeep

関連する問題