
想要搜尋字串並需要字串的一部分
文件.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
不可用,可以使用perl
(P
PCRE 中的)執行相同的操作:
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/,.*//
: 刪除逗號和後面的所有內容