문자열에서 텍스트를 선택하고 출력하는 방법

문자열에서 텍스트를 선택하고 출력하는 방법

특정 문자열에 포함된 일부 텍스트를 선택하여 파일로 출력해야 합니다.

문자열이 다음과 같다고 가정합니다. ABCDEFGHIJKLMNOP

ABCDEF 뒤, K 앞의 내용을 추출하는 명령은 무엇입니까? (예: GHIJ에만 해당)을 다른 파일로 복사하시겠습니까?

나는 grep 명령을 사용해 보았지만 그 복잡성을 거의 이해하지 못했기 때문에 매번 실패했습니다. 아주 기본적인 것이 빠졌나 봐요.

미리 감사드립니다.

답변1

나는 당신이 쉘(예: bash.

필요할 것이예요 sed.

예를 들어

sed -re 's/^ABCDEF(.*)K.*/\1/'

grep을 사용하여 검색하고 교체합니다.s/thing to find as regexp/thing to replace it with/

\1첫 번째 대괄호 표현식으로 대체됩니다.

답변2

일치하는 항목이 발견되면 grep은 일치하는 전체 줄을 인쇄합니다. 일치하는 텍스트만 인쇄하려면 -o스위치를 사용할 수 있습니다. 그러나 이는 해당 줄에서 일치하는 전체 문자열을 인쇄합니다. 필요한 것을 인쇄하려면 다음을 사용해야 합니다.LookBehind 및 Lookahead 어설션. 이를 위해서는 PCRE를 지원하는 grep이 필요합니다.

> grep -Po '(?<=ABCDEF).+(?=K)' <<< 'ABCDEFGHIJKL'
GHIJ

설명하다:

  • -PPerl 호환 정규 표현식 활성화
  • -o전체 줄이 아닌 일치하는 텍스트만 인쇄합니다.
  • (?<=ABCDEF)ABCDEF 일치에 대한 긍정적인 뒤돌아보기 어설션
  • (?=K)K와 일치하는 긍정적 예측 어설션
  • .+위 주장 사이의 모든 항목과 일치합니다.

답변3

게시된 솔루션 중 하나에는 아무런 문제가 없지만 원하는 경우 순수 Bash에서 이 작업을 수행할 수 있습니다.

값이 포함된 문자열이 주어지면:

echo $myStr 
ABCDEFGHIJKLMNOP

넌 할 수있어:

echo $(expr match "$myStr" '.*F\(.*\)K.*')
GHIJ

관련 정보