다음과 같은 줄이 있고 그 사이에 모든 단어가 필요합니다.선택하다그리고완벽한
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)이 필요합니다.