文字列を検索したいので、文字列の一部が必要です。
ファイル.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に置き換えるとパターンが削除されますが、これは望むようです。sed
pattern
p
変更された行の末尾の出力。-n
このオプションはすべてのデフォルト出力を抑制します。
答え2
GNUのgrep
(最近の)PCREサポートで構築する場合(これはGNUおよびBSDシステムで一般的です):
grep -Po '\Q$$ENV$$_\E\K[^\s,]+' < file
各項目の後のスペースとコンマを除くすべての文字シーケンスが抽出されます$$ENV$$_
。
grep
GNUが利用できない場合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/,.*//
:コンマとその後のすべての内容を削除します。