Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   [решено] Замена файлов по списку (http://forum.oszone.net/showthread.php?t=165878)

Endy1 01-02-2010 16:40 1336032

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

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

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

Код:

#!/bin/bash

file=/home/volod/Root/virt1


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


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

[mzd] 01-02-2010 18:38 1336138

Скрипт меняет строку 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

Вам необходимо дополнить его своими параметрами.

ruslandh 01-02-2010 20:37 1336257

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

Endy1 02-02-2010 10:20 1336704

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

Код:

#
!/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


Endy1 02-02-2010 11:01 1336739

Запустил свой скрипт и столкнулся с проблемой. Всё работало хорошо, до сих пор, пока в списке не наткнулся на пусть с пробелами.
Например /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 или ещё как-то.

Endy1 02-02-2010 13:33 1336882

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

Kent 02-02-2010 13:58 1336911

Код:

sed 's/^/"/ ; s/$/"/'

Endy1 02-02-2010 14:12 1336924

Цитата:

Цитата Kent
sed 's/^/"/ ; s/$/"/' »

Спасибо! Добавить кавычки получилось. Да только мой скрипт теперь эти пути не считает за файлы...
Какой-то замкнутый круг. :(

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

Kent 02-02-2010 20:27 1337233

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

Endy1 15-02-2010 13:50 1347553

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


Время: 00:17.

Время: 00:17.
© OSzone.net 2001-