Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] Замена файлов по списку

Ответить
Настройки темы
[решено] Замена файлов по списку

Пользователь


Сообщения: 96
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: Endy1
Дата: 02-02-2010
Есть множество файлов с именем "Root", каждый из которых содержит всего одну строчку. Нужно эту строчку поменять.
Командой find я нашёл все эти файлы с именем "Root". Их несколько сотен
Все пути сохранил в отдельном файлике.

Ребята подскажите пожалуйста скриптик, который бы обошёл этот список и заменил файл "Root" на тот что мне нужен. Т.е. я создам файл с нужным мне параметром, а всё, что нужно сделать это поместить его с заменой в нужные места из списка.
Или можно чтобы сам файл не менялся, а заменить только его содержание (мне кажется это сложнее).

Как пройтись по списку из файла нашёл

Код: Выделить весь код
#!/bin/bash

file=/home/volod/Root/virt1


cat $file | while read line; do
    echo "$line"
done

Осталось придумать как заменять файл.

Отправлено: 16:40, 01-02-2010

 

Аватара для [mzd]

Линуксоид-стакановец


Сообщения: 2391
Благодарности: 186

Профиль | Отправить PM | Цитировать


Скрипт меняет строку charset=windows-1251 на charset=UTF-8 в каждом файле текущей директории:
Код: Выделить весь код
#bin/sh
dir=.

for i in $dir/*
	     do
		if [ -f $i ]		   
		   then
                       cp $i $i.ed 
                       sed 's/charset=windows-1251/charset=UTF-8/g' $i > $i.ed
		       mv $i.ed $i
		fi
	     done
Вам необходимо дополнить его своими параметрами.

-------
Живя в реальном мире, стремись к невероятному... Эрнесто Че Гевара
Everybody lies. (c) House M.D.
Базовая настройка Ubuntu. Документация для новичка.
Руководство по установке, начальной настройке и основам использования операционной системы Ubuntu


Отправлено: 18:38, 01-02-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ruslandh

info man howto


Сообщения: 6958
Благодарности: 384

Профиль | Сайт | Отправить PM | Цитировать


sed -i тут не облегчит работу?

-------
Поспешай не торопясь


Отправлено: 20:37, 01-02-2010 | #3


Пользователь


Сообщения: 96
Благодарности: 2

Профиль | Отправить PM | Цитировать


Спасибо за ответ! Я попробовал немного иначе, вроде получилось. Ваш вариант тоже испытаю.

Код: Выделить весь код
#
!/bin/bash

file=/home/volod/Root/virt3 #Файл со списком путей к нужному файлу
filename=uus
cat=/bin/cat


$cat $file | while read line; do
if [ -f $line ]; then
echo "Нужный текст" >  $line
echo -e  $line '\033[1m OK'  #ОК с украшательствами :)
tput sgr0   
sleep 1
else
echo "$line is not file"
sleep 1
fi
done

Отправлено: 10:20, 02-02-2010 | #4


Пользователь


Сообщения: 96
Благодарности: 2

Профиль | Отправить PM | Цитировать


Запустил свой скрипт и столкнулся с проблемой. Всё работало хорошо, до сих пор, пока в списке не наткнулся на пусть с пробелами.
Например /srv/virtual_2/example.domen.ru/html/lib/Hardus/Fail new/Root

Естественно из за пробела в пути, скрипт не понимает, что это файл и не делает в нём изменений.
Мне кажется самый простой способ в файле со списком путей экранировать все пробелы обратным слешем, но как это сделать не в ручную пока не знаю. Может кто-то подскажет?

Т.е. это /srv/virtual_2/example.domen.ru/html/lib/Hardus/Fail new/Root
Привести к виду /srv/virtual_2/example.domen.ru/html/lib/Hardus/Fail\ new/Root (с экранирующим слешем перед пробелом).

Наверняка это можно сделать в vi или ещё как-то.

Отправлено: 11:01, 02-02-2010 | #5


Пользователь


Сообщения: 96
Благодарности: 2

Профиль | Отправить PM | Цитировать


Появилась идея просто заключить каждую строчку текста в кавычки.
Кто-нибудь знает как это сделать? Любыми средствами, кроме вставки вручную
Пытаюсь искать как автоматизировать этот процесс в Vim, пока не получается.

Отправлено: 13:33, 02-02-2010 | #6


Странный тип


Сообщения: 813
Благодарности: 73

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
sed 's/^/"/ ; s/$/"/'

-------
Сколько не думай, а лучше водки ничего не придумаешь.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:58, 02-02-2010 | #7


Пользователь


Сообщения: 96
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Kent:
sed 's/^/"/ ; s/$/"/' »
Спасибо! Добавить кавычки получилось. Да только мой скрипт теперь эти пути не считает за файлы...
Какой-то замкнутый круг.

Похоже надо всё таки искать решение, чтобы добавить обратный слеш (экранирующий пробелы) в те месте списка, где они есть.

Отправлено: 14:12, 02-02-2010 | #8


Странный тип


Сообщения: 813
Благодарности: 73

Профиль | Отправить PM | Цитировать


Просто надо значение переменной брать в кавычки -- "$file"

-------
Сколько не думай, а лучше водки ничего не придумаешь.


Отправлено: 20:27, 02-02-2010 | #9


Пользователь


Сообщения: 96
Благодарности: 2

Профиль | Отправить PM | Цитировать


Спасибо друзья. Получилось!

Отправлено: 13:50, 15-02-2010 | #10



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] Замена файлов по списку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Правильная замена файлов в дистрибутиве illznn Автоматическая установка Windows 2000/XP/2003 5 06-04-2009 13:02
замена названия всех файлов Malfatto Хочу все знать 4 14-11-2008 16:37
Доступ - Замена защищенных файлов echo off Microsoft Windows 2000/XP 1 23-09-2008 03:34
Интерфейс - Замена иконок файлов в Vista PulSar.CE194694 Microsoft Windows Vista 0 16-09-2008 15:22
Перемещение по списку в Excel Evita Хочу все знать 3 16-03-2006 01:13




 
Переход