0

.txt ファイルに含まれるプレースホルダー (##ERROR_MSG##) を変数 ($ERROR_MSG) の内容に置き換えるために SED を使用したい

ここで私が使用するコマンド:

cat FILE.TXT  |  sed "s/##ERROR_MSG##/$ERROR_MSG/"

$ERROR_MSG に含まれるもの (特殊文字を含み、複数行)

ERROR:
ORA-12170: TNS:Connect timeout occurred

ERROR:
ORA-12162: TNS:net service name is incorrectly specified

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]] where    <logon> ::= <username>[/<password>][@<connect_identifier>]
<proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

次のエラー メッセージが表示されます。

sed: -e expression #1, char 22: unterminated `s' command
4

2 に答える 2

0

これを試して:

sed "s+##ERROR_MSG##+$ERROR_MSG+" FILE.TXT

$ERROR_MSGのテキストにスラッシュが含まれているため、行が機能しませんでした/

編集:

この awk oneliner も試してください:

awk -v t="$ERROR_MSG" '{sub(/##ERROR_MSG##/,t)}7' FILE.TXT
于 2014-05-09T15:25:24.823 に答える
0

$ERROR_MSG の任意の値で機能する、これを行う唯一の確実な方法は次のとおりです。

awk -v old="##ERROR_MSG##" -v new="$ERROR_MSG" 's=index($0,old){$0 = substr($0,1,s) new substr($0,s+length(old))} 1' file
于 2014-05-10T15:33:26.400 に答える