Grep - 출력 행의 열 3에 문자열이 포함되어 있습니다.

Grep - 출력 행의 열 3에 문자열이 포함되어 있습니다.

특정 문자열이 포함된 행을 출력하려고 합니다.

행의 예:

Column1:Column2:Column3 + ID
Column1:Column2:Column3 - ID
Column1:Column2:Column3

원하는 출력:

Column1:Column2:Column3 + ID

노력하다-

awk -F: '$3 == + ID' < file.txt > out.txt

다른 입력 없이 열 3에서 정확한 "+ID"를 검색하므로 출력이 반환되지 않습니다.

이제 난 할 수 있다는 걸 알아

grep -f " + ID" <file.txt >out.txt

그러나 + ID가 열 3에 없으면 + ID를 포함하는 모든 행이 출력됩니다. 예는 다음과 같습니다.

산출:

Column1:Column2 + ID:Column3

+ ID는 열 3이 아닌 열 2에 있습니다.

이제 특정 .txt 파일뿐만 아니라 모든 파일을 검색하면서 디렉토리 내에서도 이 작업을 수행하고 싶습니다.

답변1

문자열 일치 대신 필드 끝에 고정된 정규식 일치를 사용할 수 있습니다.

awk -F: '$3 ~ /+ ID$/' < file.txt
Column1:Column2:Column3 + ID

또는 줄 끝에 고정하려면 다음을 사용하세요 grep.

grep '+ ID$' < file.txt
Column1:Column2:Column3 + ID

답변2

grep -Pie '(Column\d:?){3} + ID$' file.txt > out.txt

예를 들어 Column1: 패턴이 3번 이상 반복된다면 {3,}위의 내용을 수정하세요.

답변3

이 작업은 다음을 통해 수행할 수 있습니다.

find dir -type f -exec grep -H '+ ID$' {} +

이렇게 하면 디렉터리 안이나 아래에서 모든 일반 파일을 찾은 dir다음 grep -H '+ ID$'가능한 한 많은 파일을 일괄 실행합니다. 결과에는 정규식과 일치하는 파일의 파일 이름과 일치하는 파일의 줄이 포함됩니다.

파일 이름만 얻으려면 with -l대신 을 사용하고 , 일치하는 줄만 얻으려면 를 사용하십시오 .-Hgrep-L

정규식은 줄 끝에 정확한 문자열이 포함된 파일의 모든 줄 + ID$과 일치합니다 .+ ID

또는 하위 디렉터리로 재귀할 수 있는 기능 은 없지만 find다음과 같습니다 .grep

grep -R '+ ID$' dir

grep이를 수행하지 않는 시스템 -H(비표준 옵션)이 있는 시스템에서는 다음을 사용할 수 있습니다.

find dir -type f -exec grep '+ ID$' /dev/null {} +

그러한 시스템에서 파일 이름이 아닌 행만 일치시키려면 cat파일을 함께 모으고 grep하십시오.

find dir -type f -exec cat {} + | grep '+ ID$'

답변4

다음과 같이 substr을 사용할 수 있습니다.

awk '{ if (substr($0,position,length)=="+  ID" { print $0 } }' myfile.txt

관련 정보