powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Выполнить замену в файле стандартными средствами
9 сообщений из 9, страница 1 из 1
Выполнить замену в файле стандартными средствами
    #33931711
Gallagher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть текстовой файл, в котором имеются строчки вида VARCHAR(x), где x - натуральное. Задача: средствами коммандного интерпритатора заменить такие строчки на VARCHAR(y), где y=x*2
...
Рейтинг: 0 / 0
Выполнить замену в файле стандартными средствами
    #33932035
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а VARCHAR(x) один всего в строке? тогда что-нибудь типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#!/bin/sh

while read a
do
 set `echo $a | awk 'BEGIN{FS="VARCHAR\\(|\\)"}{print $2}' | sed s/[,\(\)]//g`
 var=`echo $ 1  \*  2  | bc`
 echo $a | sed -e "s/VARCHAR(.*)/VARCHAR($var)/"
done < file.txt
...
Рейтинг: 0 / 0
Выполнить замену в файле стандартными средствами
    #33932479
Gallagher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл уточнить, что VARCHAR(x) не один в строке...
но идея ясна
спасибо огроменное
...
Рейтинг: 0 / 0
Выполнить замену в файле стандартными средствами
    #33933046
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надеюсь, что получилось. Imho универсальный вариант мог бы быть таким:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
#!/bin/sh


fff(){
read b

set `echo $@ | awk '{for(i=1;i<=NF;i++)s=s " " $i*2}END{print s}'`

i= 1 
 while [ "$1" != "" ]
 do
 b=`echo $b | sed -e "s/VARCHAR([.0-9]*)/VAR_zxzx_CHAR($1)/"`
  shift
 i=`expr $i +  1 `
 done
 b=`echo $b | sed -e "s/VAR_zxzx_CHAR/VARCHAR/"`
 echo $b
}

while read a
do

 set `echo $a | awk 'BEGIN{FS="VARCHAR\\\("}{for(i=2;i<=NF;i++){print substr($i,0,index($i,")")-1)}}'`

echo $a | fff $@
done < file.txt
...
Рейтинг: 0 / 0
Выполнить замену в файле стандартными средствами
    #33933413
nik2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--null--надеюсь, что получилось. Imho универсальный вариант мог бы быть таким:

...ну ты маньяк... :)

яб еще в конце приписал пожелание автору перл выучить...
...
Рейтинг: 0 / 0
Выполнить замену в файле стандартными средствами
    #33933438
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, perl в данном случае гораздо лучше бы подошел. Просто несказанно.
Но бывают ситуации, когда такое надо делать именно на shell.
Работодатель требует типа. Сам столкнулся. Его не интересует, что сотрудник может владеть более мощным инструментом - perl или python или еще чем-то, требование скриптинг - на стандартном shell и точка.
...
Рейтинг: 0 / 0
Выполнить замену в файле стандартными средствами
    #33933456
contr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безотносительно инструмента я бы рекомендовал менять не на "varchar(y), где y=x*2", а на "varchar(x CHAR)" - так оно понадежнее будет
...
Рейтинг: 0 / 0
Выполнить замену в файле стандартными средствами
    #33933975
Gallagher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nik2
яб еще в конце приписал пожелание автору перл выучить...

Автор знает пёрл. Но особенность задачи заключается в том, что скрипт должен будет выполняться на серваках в спартанской остастке (т.е. безо всяких perl, php, python и еже с ними)
...
Рейтинг: 0 / 0
Выполнить замену в файле стандартными средствами
    #33933990
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собственно, я так и думал
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Выполнить замену в файле стандартными средствами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]