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

관련 정보