Precisa remover espaço extra no comando sed
Consegui obter uma string após $$ ENV $$ _ no arquivo com o comando abaixo
sed '/.*$$ENV$$_/!d;s///;s/,.*//;s/^[ \t]*//' file.txt
estou executando o comando como:
TAB=$(sed '/.*$$ENV$$_/!d;s///;s/,.*//;s/^[ \t]*//' $file.txt)
e esta variável ($ TAB) eu estou passando um comando diferente para substituir o valor no arquivo diferente com o comando:
cat backup.txt | sed 's%\$\$BTABLE\$\$%"${TAB}"''%g' > $file_bkp1.txt
mas na minha saída, estou ganhando um espaço extra.
arquivo.txt
CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE , NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKADSRATIO
Comando sed para buscar valor no arquivo.txt
TAB=$(sed '/.*$$ENV$$_/!d;s///;s/,.*//;s/^[ \t]*//' file.txt)
Comando para substituir o valor (de: $$ BTABLE $$) para (TEMP_ESM.EMPASGMTAMPTMPRTRSE) de backup.txt
cat backup.txt | sed 's%\$\$BTABLE\$\$%"${TAB}"''%g' > file_bkp.txt
backup.txt Arquivo de entrada
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,
Saída do arquivo_bkp.txt com espaço extra no final destacado em negrito
Arquivo de saída :
CREATE MULTISET TABLE $$ENV$$_TEMP_ESM.EMPASGMTAMPTMPRTRSE _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,