
문자열을 검색하고 싶고 문자열의 일부가 필요합니다.
파일.txt:
CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE, NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKADSRATIO
아래 sed
명령을 사용하여 추가 값을 얻는 동안
산출:
bash-4.3$ sed -n 's/.*$$ENV$$_//p' file.txt
**TEMP_ESM.EMPASGMTAMPTMPRTRSE** ,NO FALLBACK ,
나만 필요해TEMP_ESM.EMPASGMTAMPTMPRTRSE
답변1
sed -n 's/.*$$ENV$$_//p' example.txt
명령 s/pattern/replacement/
은 sed
정규식의 발생을 모든 행에서 검색하여 pattern
대체합니다. 빈 교체를 사용하면 패턴이 삭제되는데 이는 원하는 것 같습니다.
후행은 p
수정된 행을 출력하는 반면 모든 기본 출력은 -n
옵션에 의해 억제됩니다.
답변2
(최근) PCRE 지원으로 구축된 GNU의 경우 grep
(GNU 및 BSD 시스템에서 일반적으로 발생함):
grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file
는 모든 발생 뒤에 오는 공백과 쉼표를 제외한 모든 문자 시퀀스를 추출합니다 $$ENV$$_
.
GNU를 사용할 수 없는 경우 ( PCRE에서) grep
동일한 작업을 수행할 수 있습니다 .perl
P
perl -lne 'print for /\$\$ENV\$\$_\K[^\s,]+/g' < file
또는 perl
버전이 너무 오래되어 지원되지 않는 경우 \K
:
perl -lne 'print for /\$\$ENV\$\$_([^\s,]+)/g' < file
답변3
sed
접근하다:
sed -n 's/^CREATE.*$_\([^[:space:],]*\).*/\1/p' file
\([^[:space:],]*\)
[:space:]
- 공백 과 쉼표를 제외한 문자가 포함된 첫 번째 캡처 그룹,
출력:
TEMP_ESM.EMPASGMTAMPTMPRTRSE
답변4
sed '/.*$$ENV$$_/!d;s///;s/,.*//'
/.*$$ENV$$_/!d
: 라인에 가 포함되어 있지 않으면$$ENV$$_
출력이 없으며 추가 처리가 없습니다.s///
: 일치하는 패턴을 제거합니다.s/,.*//
: 쉼표와 그 뒤의 모든 내용을 제거하십시오.