SED替换来自包含特殊字符的变量

时间:2014-05-09 15:13:53

标签: unix sed ora-12170

我想使用SED来替换.txt文件中包含的占位符(## ERROR_MSG ##)和变量的内容($ ERROR_MSG)

这里是我使用的命令:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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