The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Нужно написать скрипт дял замены одного слова в текстовом фа..."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Нужно написать скрипт дял замены одного слова в текстовом фа..."
Сообщение от bob emailИскать по авторуВ закладки on 23-Янв-04, 11:06  (MSK)
Привте всем. Мне нужно написать скрипт, который делал бы следеющую работу:
1 Получал имя текущей дирректории в переменную, например $dir
2 Копировал файл "primer.txt" в файл "$dir.txt"
3 В файле "$dir.txt" заменял бы все встречающиеся сочетания "test" на слово "$dir".

Например мы находимся в директории "osen". Результатом работы скрипта должет быть файл "osen.txt" в котором все сочитания "test" будут заменены на "osen".
Файл "primer.txt"
Se on lihtsalt test. Me testime sele script.

файл "osen.txt"
Se on lihtsalt osen. Me osenime sele script.


***********************************************************
Как выполнить первый пункт, я вообще не имею понятия. Но если это сложно, то думаю можно просто попросить пользователя ввести имя дерриктории
Второй - проще. А вот как третий... :*)
Я пытался решить это по разному, {tr "test" "osen"} заменят ВСЕ буквы t на e, e-s, s-e, t-n, в резульатте чего файл только отдаленно похож на то, что нужно. :(
На то, чтобы нормально понять, как же работают sed, ed, awk, мозгов не хватает, так что у меня это вариант тоже не прошел.

Помогите пожалуйста, напишите это скриптик, желатильно с комментариями, чтобы я тоже разобрался, как это делается.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Нужно написать скрипт дял замены одного слова в текстовом фа..."
Сообщение от SergeiZz Искать по авторуВ закладки on 23-Янв-04, 16:29  (MSK)
>1 Получал имя текущей дирректории в переменную, например $dir
>2 Копировал файл "primer.txt" в файл "$dir.txt"
>3 В файле "$dir.txt" заменял бы все встречающиеся сочетания "test" на слово
>"$dir".
# dir.sh
# Подразумевается, что побелов не может быть
# в имени текущего каталога!
DIR=`pwd | tr -s '/' '\n' | sed -ne '$p'`
cp -vu primer.txt $DIR.txt.tmp
sed -e "s/test/$DIR/g" $DIR.txt.tmp > $DIR.txt
rm $DIR.txt.tmp

Запуск:
bash$ . dir.sh

Писано наспех: протестируйте на разные необычности в имени текущего
каталога. Я подобную задачу решал однажды, но тогда я воспользовался
Ruby, а не bash.

По пунктам:
1. Заменяем / на новую строку ('/' '\n'). -s -- удалить пустые
строки (кроме первой от лидирующего /).
Режем последнюю строку ('$p') $ -- последняя строка, p -- напечатать.
Здесь важно -n, а то он (sed) дублирует ввод.
Вот здесь-то на счёт пробелов стоит подумать...
`` -- результат вывода команды, написанной между обратными апострофами.

2. Ну, это Вы знаете.

3. Заменим test на osen. "s/test/osen/g" -- здесь важно g: иначе он (sed)
заменит только первое test в каждой строке (g от "global").
И теперь нам нужно дублирование ввода, поэтому без -n.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Нужно написать скрипт дял замены одного слова в текстовом фа..."
Сообщение от bob Искать по авторуВ закладки on 25-Янв-04, 13:15  (MSK)
Большое спасибо, вы мне очень помогли.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Нужно написать скрипт дял замены одного слова в текстовом фа..."
Сообщение от SergeiZz Искать по авторуВ закладки on 26-Янв-04, 11:26  (MSK)
>Большое спасибо, вы мне очень помогли.
Большое пожалуйста.
Но будьте поосторожнее с подобными скриптами: они раздолье для взломщиков.
Например. Я заменял имя текущего каталога с помощью s/xxx/yyy/g, но
здесь xxx не просто строка, а регулярное выражение, и некоторые символы,
соответственно, имеют специальный смысл, отчего могут быть презабавные
глюки, когда имя текущего каталога состоит не только из букв и цифр.
Ну, а ежели бы я воспользовался не sed, а perl? Йо-хо-хо!...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Нужно написать скрипт дял замены одного слова в текстовом фа..."
Сообщение от andy Искать по авторуВ закладки(??) on 06-Апр-04, 21:54  (MSK)
можно заменить контекст ABRA на контекс KADABRA во всех файлах начиная с текущего каталога

пишем скриптик в файл и выполняем.

for file in `find . -type f -name "*.*" -print`;\
do sed s/ABRA/KADABRA/g < "$file" > "$file.tmp";\
mv "$file.tmp" "$file"; done

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру