我在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文件中
答案 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
在尝试之前准备好一些备份。