문자열을 검색하고 싶고 문자열의 일부가 필요합니다.
파일.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/
검색하여 바꿉니다. null로 바꾸면 패턴이 제거되는데 이는 원하는 것 같습니다.sed
pattern
p
수정된 행의 후행 출력. -n
이 옵션은 모든 기본 출력을 억제합니다.
답변2
GNU의 grep
(최근) PCRE 지원으로 구축하는 경우(이는 GNU 및 BSD 시스템에서 일반적입니다):
grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file
각 항목 뒤의 공백과 쉼표를 제외한 모든 문자 시퀀스가 추출됩니다 $$ENV$$_
.
grep
GNU를 사용할 수 없는 경우 perl
( PCRE에서)를 사용하여 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/,.*//
: 쉼표와 그 뒤의 모든 내용을 제거합니다.