需要替换文件内容

Rah*_*jee 3 sed aix

我陷入了困境。我有一个包含内容的文件 script.txt

$cat script.txt

SET TABLESPACE CONTAINERS FOR 3
-- IGNORE ROLLFORWARD CONTAINER OPERATIONS
USING (
FILE '/db2data2/dbs/rahtest/rahtest1.lrg'  5120
);


SET TABLESPACE CONTAINERS FOR 4
-- IGNORE ROLLFORWARD CONTAINER OPERATIONS
USING (
  FILE   '/db2data2/dbs/rahtest/rahtest2.lrg'  5120
);
Run Code Online (Sandbox Code Playgroud)

我的要求是行中的文件系统

FILE '/db2data2/dbs/rahtest/rahtest1.lrg' 5120
FILE   '/db2data1/dbs/rahtest/rahtest2.lrg'  5120
Run Code Online (Sandbox Code Playgroud)

我需要更换

/db2data2/dbs/rahtest/rahtest1.lrg
Run Code Online (Sandbox Code Playgroud)

/db2data2/dbs/rahtest/rahtest2.lrg
Run Code Online (Sandbox Code Playgroud)

与其他文件系统;说

/db2data3/dbs/rahtest/rahtest1.lrg
Run Code Online (Sandbox Code Playgroud)

/db2data3/dbs/rahtest/rahtest2.lrg
Run Code Online (Sandbox Code Playgroud)

分别。

其他部分应该是一样的。我的输出现在是这样的——

FILE '/db2data3/dbs/rahtest/rahtest1.lrg'  5120
FILE '/db2data3/dbs/rahtest/rahtest2.lrg'  5120
Run Code Online (Sandbox Code Playgroud)

它应该反映在我的文件中。我不知道线条在线条中的位置。我用sed试过。我试图将这些行放入变量中,比如 var1 和 var2

var1=`echo /db2data2/dbs/rahtest/rahtest1.lrg'
var2=`echo /db2data2/dbs/rahtest/rahtest2.lrg'
var3=`echo /db2data3/dbs/rahtest/rahtest1.lrg'
var4=`echo /db2data3/dbs/rahtest/rahtest2.lrg'
Run Code Online (Sandbox Code Playgroud)

当我试图做

sed 's/$var/$var3' script.txt
Run Code Online (Sandbox Code Playgroud)

它失败了,因为 / 在那里。我正在使用 AIX。我的最终文件应该是这样的——

SET TABLESPACE CONTAINERS FOR 3
-- IGNORE ROLLFORWARD CONTAINER OPERATIONS
USING (
FILE '/db2data3/dbs/rahtest/rahtest1.lrg'  5120
);


SET TABLESPACE CONTAINERS FOR 4
-- IGNORE ROLLFORWARD CONTAINER OPERATIONS
USING (
  FILE   '/db2data3/dbs/rahtest/rahtest2.lrg'  5120
);
Run Code Online (Sandbox Code Playgroud)

Cyr*_*rus 7

/文本中有 a时,您可以使用不同的字符,例如 a|作为 sed 参数的分隔符。此外,在使用变量时,您需要对命令使用双引号 ( ""),sed因为变量不会在单引号内展开。尝试这个:

var1='/db2data2/dbs/rahtest/rahtest1.lrg'
var2='/db2data2/dbs/rahtest/rahtest2.lrg'
var3='/db2data3/dbs/rahtest/rahtest1.lrg'
var4='/db2data3/dbs/rahtest/rahtest2.lrg'

sed -e "s|$var1|$var3|g" -e "s|$var2|$var4|" script.txt
Run Code Online (Sandbox Code Playgroud)