URLの特定の部分を含むCSV行の場合は、grep awkまたはsed

URLの特定の部分を含むCSV行の場合は、grep awkまたはsed

Squidログファイルをクリーンアップしようとしており、列11に「/0/」を含むサイトの行を削除したいと思います。一例:

Row1: column1, column2, column3...column10, ht*p://blah.com/page/230/0/blah0.html
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row3: column1, column2, column3...column10, ht*p://www.yahata.org/things/time/0/yahata.php
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php

stackexchangeはこれを実際のリンクと見なすため、「http」の「*」を無視します。

デフォルトでは、行1と3は削除し、行2と4は維持したいと思います。私は私が見つけたり考えることができるすべて、およびgrepコマンドを試しました。awkcolumn1 に要素がある場合はsed削除できますが、他の要素は削除できません。grep

ベストアンサー1

/0/最後の列がない行が欲しいようです。次のようにできます。

grep -v '[^[:blank:]]*/0/[^[:blank:]]*$' file.txt

例:

% grep -v '[^[:blank:]]*/0/[^[:blank:]]*$' file
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php

一方、列 11 と正確に一致させるには、次のようにします。

grep -vE '^([^[:blank:]]+[[:blank:]]+){10}[^[:blank:]]*/0/[^[:blank:]]*$' file.txt

例: 列 5 一致

% grep -vE '^([^[:blank:]]+[[:blank:]]+){4}[^[:blank:]]*/0/[^[:blank:]]*$' file
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php

おすすめ記事