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