특정 단어 앞에 , 가 나타나는 상황 검색

특정 단어 앞에 , 가 나타나는 상황 검색

6번째 위치에 "Happy"라는 특정 단어가 포함된 행 수를 찾아야 하는 CSV 파일이 있습니다. 쉼표 5개 뒤에.

그래서 나는 이것을 쓰고 있습니다 :

grep -P -c  ",\{5,\}"'Happy' file.csv

하지만 0을 반환합니다.

파일 내용은 다음과 같습니다.

123, abc, def, ghi, e444, 해피, 224, e44

답변1

grep -E '^([^,]*,){5}Happy' <in >out

이렇게 하면 찾을 수 있습니다.Happy다섯 번째 쉼표 바로 옆에 있는 경우에만 해당됩니다. 6번째 필드 내 어디에서나 찾으려면 약간의 호흡 공간을 추가하십시오.

grep -E '^([^,]*,){5}[^,]*Happy' <in >out

일치하는 행만 계산하려면 다음 -c옵션을 사용하세요.

grep -cE '^([^,]*,){5}[^,]*Happy' <in >out

저는 정규식에 매우 익숙하지만, 그렇지 않더라도 다른 유형보다 re 구문을 선택할 것 같습니다. 몇 가지 기준선을 익히면 나머지도 제자리에 있게 됩니다. 정규식은 매우 적은 수의 기본 구성 요소를 여러 방법으로 결합하여 입력을 설명합니다.

  • * 클린트

    • 이전 표현식이 0회 이상 발생함을 나타냅니다.
  • [대괄호 표현]

    • 어떤 일이 발생했음을 나타냅니다.( ^거부될 수도 있음)문자 세트 포함
  • {최소 ,최대 }반복 횟수

    • 이전 표현식의 발생 횟수를 지정합니다.

    • 확장 정규식 메타 문자 ?는 의 약어입니다 {0,1}.

  • (하위 표현식)

    • 포함된 모든 표현식을 단일 표현식으로 수집합니다.
  • .특징

    • 단일 문자와 일치
  • ^|$

    • ^다음 표현식의 줄 시작 앵커 포인트, |표현식 간의 교대 또는 $줄 끝 앵커 포인트를 나타냅니다 .

이것이 기본입니다. POSIX -E확장 정규식 구문에는 다음도 포함됩니다.클라인 +- 이는 다음과 관련이 있습니다.*필요를 제외한 모든 측면마지막 하나이전 표현과 일치합니다. 대괄호 표현식에는 특히 내부 문자 클래스 및 반복과 일치하는 방법 과 관련된 [다양한 미묘함이 있습니다 . 실제로 대부분의 구현][(:|.|=)(=|.|:)]연장하다확장된 re 구문은 이전 하위 표현식에 대한 최소한 기본 정규식 역 \[num]참조를 처리할 수 있습니다.()

하지만 기본적으로 생각해 보면 위의 표현 중 하나 또는 다른 단일 문자는 그 자체로 표현이며, 모두 결합되어 원하는 일치 항목을 설명하는 전체 표현이 됩니다.

이 모든 것을 종합하면 grep위의 표현식은 다음과 같이 분류됩니다.

  • ^([^,]*,){5}Happy

    • 가장 왼쪽 위치부터 시작하여 일치하는 줄에는 0개 이상의 쉼표가 아닌 문자로 구성된 시퀀스가 ​​5개 이하로 포함되어야 합니다. 각 시퀀스 뒤에는 쉼표 문자가 오고 모든 시퀀스 뒤에는 문자열이 옵니다.Happy.

답변2

넌 할 수있어:

grep '^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,Happy' file.txt

줄 시작 부분부터 5개의 쉼표가 있다고 가정하고 줄의 아무 곳에서나 시작하는 경우 이니셜을 제거하세요 ^.

패턴은 단순히 연속해서 5개 이상의 쉼표가 있는 줄을 찾습니다.

답변3

awkCSV 파일로 작업할 때 명령어를 사용하는 것이 더 간편하고 쉬울 것 같아요 . 필드 개념을 자연스럽게 지원하므로 삶이 훨씬 쉬워집니다.

awk -F, '$6 == "Happy" { count++ } END { print count }' file.csv

명령은 다음과 같이 분류됩니다.

awk             -  The command to run
-F,             -  Use a comma as the field separator
$6 == "Happy"   -  Only match lines where the sixth field equals "Happy"
{ count++ }     -  For each line matched, add one to the "count" variable
END             -  When all that is done...
{ print count } -  ...print the value of "count"
file.csv        -  The file to read from

관련 정보