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/,.*//:コンマとその後のすべての内容を削除します。

関連情報