grep 사용

grep 사용

다음 줄을 고려하십시오.

842567831752rajfkglxfgk  kerigjeiofjgoe jergjerio4523789573489

genfjkgnerijio 234578934897 jgioefjgio  shfhuwehjdfu7890345289103

Linux의 위 줄에서 789 다음 네 자리를 얻는 방법

답변1

grep 사용

grep -Po '(?<=789).{4}'

설명하다

  • grep -P: Perl 모드에서 grep 사용
  • -o: 일치하는 부분만 반환
  • (?<=789): 뒤를 돌아보세요. 이는 "일치" 섹션 앞에 나타나야 합니다.
  • .{4}: 4개의 문자와 일치합니다(lookbehind 이후). 이것이 반환될 내용입니다.

아니면 sed를 사용하세요

sed -r 's/.*789(.{4}).*/\1/'

789이는 대기열에 하나만 있다고 가정합니다.

설명하다

  • sed -r: 가독성을 높이려면 확장 정규식 모드에서 sed를 사용하세요.
  • s/foo/bar/: 사용 foo. . . 교체 bar.
  • .*789(.{4}).*: 줄의 시작 부분과 일치한 .*다음 7894개의 문자를 일치시키고 (.{4})두 문자를 모두 캡처한 ()다음 줄의 나머지 부분을 캡처합니다 .*. 이는 전체 라인과 정확히 일치합니다.
  • \1: 전체 줄을 위에서 일치하는 첫 번째 패턴으로 바꿉니다.

아니면 awk를 사용하세요

awk '{if (match($0,/789(.{4})/,m)) print m[1]}'

789이는 대기열에 하나만 있다고 가정합니다. awk에서는 이를 수행하는 방법이 6가지 정도 있을 수 있습니다.

설명하다

  • match($0,/789(.{4})/,m): 전체 줄에서 $0정규식을 찾아 789(.{4})다음 4개의 문자를 캡처합니다 789.
  • print m[1]:첫 번째 캡처 그룹을 인쇄합니다.

그냥 숫자

숫자만 얻으려면 다음과 같이 사용할 수 있습니다.

grep -Po '(?<=789).*' | sed -r 's/^[^0-9]*([0-9])[^0-9]*([0-9])[^0-9]*([0-9])[^0-9]*([0-9]).*/\1\2\3\4/'

이 전략은 다음을 가정합니다.마지막 네자리 789.

설명하다

  • grep -Po '(?<=789).*':위와 유사하지만 출력모두.789
  • | sed -r 's/foo/bar/':확장 정규식 패턴을 사용하여 sed로 파이프하고 foo`bar로 바꿉니다.
  • ^[^0-9]*([0-9])[^0-9]*([0-9])[^0-9]*([0-9])[^0-9]*([0-9]).*: 줄의 시작 부분 ^과 숫자가 아닌 모든 문자를 일치시킨 [^0-9]*다음 숫자를 캡처합니다 ([0-9]). 이것을 세 번 더 반복하고 나머지 줄을 일치시킵니다 .*.
  • \1\2\3\4: 전체 줄, 즉 다음 4자리를 캡처 그룹으로 바꿉니다.

(또는 Perl의 non-greedy 정규 표현식을 사용하여 sed 표현식을 단순화할 수 있습니다. perl -pe 's/.*?([0-9]).*?([0-9]).*?([0-9]).*?([0-9]).*/\1\2\3\4/')

답변2

$ echo "842567831752rajfkglxfgk  kerigjeiofjgoe jergjerio4523789573489" | grep -oP '789\K....'
5734
$ echo "genfjkgnerijio 234578934897 jgioefjgio  shfhuwehjdfu7890345289103" | grep -oP '789\K....'
3489
0345

답변3

AWK4자리 숫자 이후의 모든 항목을 찾는 솔루션 789:

awk -F'789' '{ for(i=2;i<=NF;i++) printf "%s%s",(i==2?"":" "),substr($i,1,4); print ""}' file
  • -F'789'- 789필드 구분자로 처리됩니다.

출력(발견된 모든 항목각 라인):

5734
3489 0345

----------

또는 각 항목을 별도의 줄에 인쇄하면 됩니다.

awk -F'789' '{ for(i=2;i<=NF;i++) print substr($i,1,4) }' file

산출:

5734
3489
0345

관련 정보