在Unix AIX中编辑/替换多个文件中的内容而不打开它

时间:2013-05-28 14:25:52

标签: unix rename vi

我在Unix目录中有多个文件。 文件名如下     EnvName.Fullbkp.schema_121212_1212_Part1.expd     EnvName.Fullbkp.schema_121212_1212_Part2.expd     EnvName.Fullbkp.schema_121212_1212_Part3.expd

在上述每个文件中都有一个如下所示的公共行。例如

EnvName.Fullbkp.schema_121212_1212_Part1.expd

有以下数据

Log=EnvName.Fullbkp.schema_10022012_0630_Part1.log  
file=EnvName.Fullbkp.schema_10022012_0630_Part1.lst  

EnvName.Fullbkp.schema_121212_1212_Part2.expd

有以下数据

Log=EnvName.Fullbkp.schema_10022012_0630_Part2.log  
file=EnvName.Fullbkp.schema_10022012_0630_Part2.lst

我想用 22052013_1000 替换EnvName.Fullbkp.schema_121212_1212_Part * .expd文件中的 10022012_0630 ,而不会打开这些文件。更改应该一次发生在目录中的所有EnvName.Fullbkp.schema_121212_1212_Part * .expdp文件中

2 个答案:

答案 0 :(得分:0)

假设您的意思是您不想手动打开文件:

sed -i 's/10022012_0630/22052013_1000/' filename*.log

更新:,因为“-i”开关在AIX上不可用,但假设您有ksh(或兼容的shell):

mkdir modified
for file in filename*.log; do
    sed 's/10022012_0630/22052013_1000/' "$file" > modified/"$file"
done

现在修改后的文件将位于modified目录中。

答案 1 :(得分:0)

在AIX上建议sed -i是一种极端乐观主义者。

更有可能安装perl。

perl -pi -e 's/10022012_0630/22052013_1000/' EnvName.Fullbkp.schema_121212_1212_Part*.expd

如果没有perl,那么你只需要像真人一样:

for i in EnvName.Fullbkp.schema_121212_1212_Part*.expd
do
  ed -s "$i" <<'__EOF'
1,$s/10022012_0630/22052013_1000/g
wq
__EOF
done

在尝试之前准备好一些备份。