특정 문자열에 포함된 일부 텍스트를 선택하여 파일로 출력해야 합니다.
문자열이 다음과 같다고 가정합니다. 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
설명하다:
-P
Perl 호환 정규 표현식 활성화-o
전체 줄이 아닌 일치하는 텍스트만 인쇄합니다.(?<=ABCDEF)
ABCDEF 일치에 대한 긍정적인 뒤돌아보기 어설션(?=K)
K와 일치하는 긍정적 예측 어설션.+
위 주장 사이의 모든 항목과 일치합니다.
답변3
게시된 솔루션 중 하나에는 아무런 문제가 없지만 원하는 경우 순수 Bash에서 이 작업을 수행할 수 있습니다.
값이 포함된 문자열이 주어지면:
echo $myStr
ABCDEFGHIJKLMNOP
넌 할 수있어:
echo $(expr match "$myStr" '.*F\(.*\)K.*')
GHIJ