取得 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

使用 GNU grep(最近的)PCRE 支援建置時(這在 GNU 和 BSD 系統上很常見):

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

將提取每次出現 後的空格和逗號之外的所有字元序列$$ENV$$_

如果 GNUgrep不可用,可以使用perlPPCRE 中的)執行相同的操作:

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/,.*//: 刪除逗號和後面的所有內容

相關內容