我有一个包含以下内容的文件:
aaaaaaaaaa
export ORACLE_HOME=/home/oracle/test/prod/db_1
bbbbbbbbbb
现在我想替换
行export ORACLE_HOME=/home/oracle/test/prod/db_1
如下所示:
export ORACLE_HOME=/u01/app/oracle/product/11204/dbhome_1
我尝试了很多通过Google找到的方法,例如使用" sed"或者" awk"但没有人工作。我试过了:
export D1="export ORACLE_HOME=/u01/app/oracle/product/11204/dbhome_1"
sed -i -e "s+export ORACLE_HOME=/home/oracle/test/prod/db_1+$D1+" file.lst
注意:正如一个谷歌搜索所说,因为字符串包含" /",所以不同的分隔符如" +"需要使用。
你能和我分享正确的命令吗?
答案 0 :(得分:1)
sed -r 's~(ORACLE_HOME=).*~\1new/path/here~'
此处~
用作分隔符。如果新路径是bash变量,则可以转义引号
sed -r 's~(ORACLE_HOME=).*~\1'$D1'~'
答案 1 :(得分:0)
如果您仍然遇到替换问题,可以使用此变体,在尝试路径替换之前将明确地找到包含export ORACLE_HOME
的行。该表达式使用替换分隔符替换'|'
。
要进行就地编辑(Linux),您可以使用'-i'
选项(并添加'-i.bak'
来备份原始版本)。如果您在没有'-i'
选项的情况下使用mac或其他操作系统,请使用重定向创建一个可以在当前文件上复制的新文件。
sed -i '/^export\sORACLE_HOME/s|=.*$|=/u01/app/oracle/product/11204/dbhome_1|' \
yourfilename
或没有'-i'
:
sed '/^export\sORACLE_HOME/s|=.*$|=/u01/app/oracle/product/11204/dbhome_1|' \
yourfilename > newfilename
cp yourfilename yourfilename.sav && mv -f newfilename yourfilename
(注意: '\'
命令行末尾的sed
是一个简单的行继续)
使用替换变量
根据您的评论,如果您想为替换字符串使用变量而不是硬编码路径,那么只需用双引号替换单引号并将变量包含为替换字符串。例如:
npath=/u01/app/oracle/product/11204/dbhome_1
sed -i "/^export\sORACLE_HOME/s|=.*$|=$npath|" dat/opath.txt