Редактирование/Замена содержимого в нескольких файлах в Unix AIX без его открытия
У меня есть несколько файлов в каталоге 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
Я хочу заменить 10022012_0630 на файлы EnvName.Fullbkp.schema_121212_1212_Part *.expd с 22052013_1000 без активации этих файлов. Изменения должны происходить во всех файлах EnvName.Fullbkp.schema_121212_1212_Part *.expdp в каталоге за раз
Ответы
Ответ 1
Предполагая, что вы не хотите вручную открывать файлы:
sed -i 's/10022012_0630/22052013_1000/' filename*.log
update:, поскольку переключатель "-i" недоступен в AIX, но при условии, что у вас есть ksh (или совместимая оболочка):
mkdir modified
for file in filename*.log; do
sed 's/10022012_0630/22052013_1000/' "$file" > modified/"$file"
done
Теперь измененные файлы будут находиться в каталоге modified
.
Ответ 2
Это какой-то экстремальный оптимист, который предлагает 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
У вас есть резервные копии, прежде чем пытаться их выполнить.