
文字列を検索したいが、文字列の一部が必要
ファイル.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$$_
。
GNU が利用できない場合は、 ( PCRE の)grep
を使用して同じことを行うことができます。perl
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/,.*//
: カンマとその後のすべてを削除します