sed出力の余分なスペースは他のスクリプトに影響します

sed出力の余分なスペースは他のスクリプトに影響します

sed コマンドから余分なスペースを削除する必要がある

以下を使用して、ファイルから$$ENV$$_の後に文字列を取得できます。

sed '/.*$$ENV$$_/!d;s///;s/,.*//;s/^[ \t]*//' file.txt

コマンドの実行:

TAB=$(sed '/.*$$ENV$$_/!d;s///;s/,.*//;s/^[ \t]*//' $file.txt)

この変数($ TAB)は、他のファイルの値をコマンドに置き換えるために別のコマンドを渡します。

cat backup.txt | sed 's%\$\$BTABLE\$\$%"${TAB}"''%g' > $file_bkp1.txt

しかし、私の出力には余分なスペースがあります。

ファイル.txt

CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE , NO FALLBACK , 
    NO BEFORE JOURNAL, 
    NO AFTER JOURNAL, 
    CHECKSUM = DEFAULT, 
    DEFAULT MERGEBLOCKADSRATIO

Sed コマンドは file.txt から値を取得します。

TAB=$(sed '/.*$$ENV$$_/!d;s///;s/,.*//;s/^[ \t]*//' file.txt)

backup.txtの値(from:$ $ BTABLE $ $)を(TEMP_ESM.EMPASGMTAMPTMPRTRSE)に置き換えるコマンド

cat backup.txt | sed 's%\$\$BTABLE\$\$%"${TAB}"''%g' > file_bkp.txt

バックアップ.txt 入力ファイル

CREATE MULTISET TABLE $$ENV$$_$$BTABLE$$_NEW ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      AR_ID INTEGER NOT NULL,
      AR_TO_RTE_TY_RL_TY_ID VARCHAR(32) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
      RTE_BASIS_TY_ID VARCHAR(32) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
      RTE_TY_ID VARCHAR(32) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
      RTE_ID INTEGER NOT NULL,

末尾に余分なスペースがあるfile_bkp.txtの出力(太字で強調表示されています) 結果ファイル:

マルチセットテーブルの作成$$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE _NEW、バックアップなし、
     かつては日記がありませんでしたが、
     日記帳がない後、
     チェックサム = デフォルト、
     基本マージブロック比
      AR_ID 整数が空ではありません。
      AR_TO_RTE_TY_RL_TY_ID VARCHAR(32) 文字セット LATIN NOT CASESPECIFIC NOT NULL,
      RTE_BASIS_TY_ID VARCHAR(32) 文字セット LATIN NOT CASESPECIFIC NOT NULL,
      RTE_TY_ID VARCHAR(32) 文字セット LATIN NOT CASESPECIFIC NOT NULL,
      RTE_ID 整数が空ではありません。

ベストアンサー1

タグのインポート

TAB=$(sed -n 's%.*\$\$ENV\$\$_\(.*\)_NEW.*%\1%p' file.txt)

-n印刷に明示的に指定された行を除くすべての行の印刷をスキップするために使用されます。p代替フラグは、「代替が発生するとこの行を印刷します」を意味します。

また、関心のある行の場合は、部分文字列をで囲み、関心のある正確な部分文字列を除くすべての項目をフィルタリングします\(..\)。その後、置換で「逆参照」を使用して、次の角かっこ内にテキストをインポートできます\1

この値を使用して、以下を置き換えます。

sed 's%\$\$BTABLE\$\$%'"${TAB}"'%g'

これは、引用符を少し調整してコマンドを少し変更したものです。

おすすめ記事