![파일에서 위치 검색을 수행하고 다른 파일에 기록된 일치 패턴이 포함된 줄을 찾는 방법 [닫기]](https://linux55.com/image/93968/%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%9C%84%EC%B9%98%20%EA%B2%80%EC%83%89%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%98%EA%B3%A0%20%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EA%B8%B0%EB%A1%9D%EB%90%9C%20%EC%9D%BC%EC%B9%98%20%ED%8C%A8%ED%84%B4%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%A4%84%EC%9D%84%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
파일 크기가 크고, 가변 길이(2바이트~8바이트)의 특정 위치 코드와 일치하는 라인만 추출해야 합니다.
나쁜 결과를 초래할 수 있으므로 일반 grep을 사용할 수 없습니다. loc cd mas를 검색할 때 grep mas
다음과 같이 입력하면 thomas라는 이름과 일치합니다.
고정된 길이의 파일이기 때문에 어디서 검색해야 하는지 알 수 있습니다. 특정 위치(제 경우에는 620-628)를 검색하여 일치하는 줄을 추출할 수 있는 명령이 있나요?
답변1
sed
이에 매우 적합함
sed -n '620,628 { /mas/p }'
sed
이제 관심 있는 마지막 줄을 읽은 후 종료할 수도 있습니다(따라서 더 빠르게 실행됩니다).
sed -n -e '620,628 { /mas/p }' -e '629q'
완전한 단어 일치를 위해 표현식을 묶어서 변경할 수 있습니다.\b
예를 들어
sed -n -e '620,628 { /\bmas\b/p }' -e '629q'
이제 일치 this contains mas and stuff
하지만아니요성냥 this is a masterful piece of work
.
답변2
나는 노력할 것이다
awk '/mas/ && NR >= 620 && NR <= 628' file
어디
NR
(레코드 수)는 줄 번호입니다./mas/
패턴 검색 중- 기본 동작은 라인을 인쇄하는 것입니다
답변3
나는 노력할 것이다
grep -P '^.{620}mas' file
스키마가 변경되는 경우 변수를 사용할 수 있습니다
PAT='mas\b'
grep -nP "^.{620}$PAT" file