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$$_

GNU が利用できない場合は、 ( PCRE の)grepを使用して同じことを行うことができます。perlP

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

関連情報