일치하는 두 단어 사이의 모든 단어 추출

일치하는 두 단어 사이의 모든 단어 추출

다음과 같은 줄이 있고 그 사이에 모든 단어가 필요합니다.선택하다그리고완벽한

 vertical on; select blah blah blah contains all special characters including /*?&;  Done

답변1

bash 정규식을 사용하면 다음이 제공됩니다(변수에 줄이 있다고 가정).

$ line="vertical on; select blah blah blah contains all special characters including /*?&;  Done"
$ [[ "$line" =~ select(.*)Done ]] && echo ${BASH_REMATCH[1]}
blah blah blah contains all special characters including /*?&;

답변2

이 시도,

 sed -e 's/.*select//;s/Done.*//'

답변3

노력하다

sed -e 's/select\(.*\)Done/\1/'

답변4

Perl 호환 정규식(PCRE)을 사용합니다.

(?<=word1).*?(?=word2)

위 패턴을 GNU에 적용합니다 grep.

$ grep -Po '(?<=select).*?(?=Done)' <<< ' vertical on; select blah blah blah contains all special characters including /*?&;  Done'
 blah blah blah contains all special characters including /*?&;  

설명하다

  • (?<=word1): 성냥word1 앞으로현재 위치를 검색하지만 결과에는 포함하지 않습니다.
  • .*?: 모든 문자열과 일치합니다.
  • (?=word2): 성냥word2 뒤쪽에현재 위치를 검색하지만 결과에는 포함하지 않습니다.

(?<=word1)모드를 (?=word2)총칭하여주위를 둘러보세요. POSIX 엔진(BRE 및 ERE)은 이 기능을 지원하지 않으므로 더 강력한 엔진(예: PCRE)이 필요합니다.

관련 정보