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/검색하여 바꿉니다. null로 바꾸면 패턴이 제거되는데 이는 원하는 것 같습니다.sedpattern

p수정된 행의 후행 출력. -n이 옵션은 모든 기본 출력을 억제합니다.

답변2

GNU의 grep(최근) PCRE 지원으로 구축하는 경우(이는 GNU 및 BSD 시스템에서 일반적입니다):

grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file

각 항목 뒤의 공백과 쉼표를 제외한 모든 문자 시퀀스가 ​​추출됩니다 $$ENV$$_.

grepGNU를 사용할 수 없는 경우 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/,.*//: 쉼표와 그 뒤의 모든 내용을 제거합니다.

관련 정보