0

我在 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 文件中发生更改

4

2 回答 2

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目录中。

于 2013-05-28T14:36:15.770 回答
0

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

安装 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

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

于 2013-05-29T09:15:04.403 回答