특정 문자열이 포함된 행을 출력하려고 합니다.
행의 예:
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
대신 을 사용하고 , 일치하는 줄만 얻으려면 를 사용하십시오 .-H
grep
-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