AIX에서 특정 단어의 값 부분 가져오기

AIX에서 특정 단어의 값 부분 가져오기

문자열을 검색하고 싶고 문자열의 일부가 필요합니다.

파일.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동일한 작업을 수행할 수 있습니다 .perlP

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/,.*//: 쉼표와 그 뒤의 모든 내용을 제거하십시오.

관련 정보