문자열의 특정 영역을 파악하는 방법은 무엇입니까?

문자열의 특정 영역을 파악하는 방법은 무엇입니까?

4000자가 넘는 문자를 포함하는 파일이 있고 위치 148에서 1824 사이의 문자열을 찾고 싶습니다. 어떻게 해야 합니까?

답변1

grep할 필요는 없습니다. 이런 종류의 작업을 위해 특별히 설계된 도구가 있습니다. cut148부터 1824까지의 문자를 얻으려면 다음을 수행하십시오.

cut -c 148-1824 file

-c플래그는 선택한 문자를 나타냅니다. -b바이트를 처리하려면 를 사용하십시오.

this 사용을 고집한다면 grep다음과 같은 작업을 수행해야 합니다(GNU grep 가정).

grep -Po '^.{147}\K.{1675}' file

이는 처음 147자( ^.{147})와 일치하고 해당 문자를 삭제합니다( \K). 그런 다음 다음 1675자를 일치시킵니다. 이 -o플래그는 grep행의 일치하는 부분만 인쇄하도록 지시하며, 이 -P플래그는 Perl 호환 정규식을 활성화하여 \K.

답변2

다음 명령은 동일한 작업을 수행합니다. 나는 그것을 테스트했고 훌륭하게 작동합니다. 위치 148부터 위치 1824까지의 모든 문자를 추출합니다.

awk '{print substr($0,148,1676)}' filename

substr($0,148,1676)}$0문자 148에서 시작하여 위치 148 + 1676의 문자까지 계속되는 현재 줄( )의 하위 문자열을 가져옵니다 . 즉, 위치 1824에서 끝납니다.

답변3

파일의 각 줄에 대한 섹션을 "grep"하려면 awk를 사용하여 섹션을 추출한 다음 해당 섹션을 정규식과 비교합니다.

단순화된 예:

$ cat input
junkjeffjunk

$ awk '{ piece=substr($0, 5, 4); if (piece ~ /jeff/) print piece; }' input
jeff

귀하의 경우:

awk '{ piece=substr($0, 148, 1676); if (piece ~ /your-regex-here/) print piece; }' input

관련 정보