Есть список файлов в которые нужно добавить текст (укращение консоли)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Stepbl4b
Сообщения: 14

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

Сообщение Stepbl4b »

Сори если не в тот раздел.

Есть список файлов, который хранитсе в текстовике, например:

/root/list.txt:
/home/user/1.txt
/2.txt
/etc/3.txt


Нужно одной командой добавить текст в конец всехэтих файлов. Подскажите как правильнее это сделать.
Спасибо сказали:
Аватара пользователя
Alexxx
Сообщения: 892
Статус: --==XXX==--
ОС: Archlinux current

Re: Есть список файлов в которые нужно добавить текст

Сообщение Alexxx »

Если я правильно понял, то что-то типа этого:

Код: Выделить всё

#!/bin/bash
list=/root/list.txt
text="TEXT"
set -- `sed -n "s/^//gp" $list` && echo $text >> $1; echo $text >> $2; echo $text >> $3
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Есть список файлов в которые нужно добавить текст

Сообщение elide »

если хочется поэстетствовать, то

Код: Выделить всё

eval echo 'Текст, который надо добавить' $(for i in `cat /root/list`; do echo -n "| tee -a $i "; done) > /dev/null
хотя банальный

Код: Выделить всё

cat /root/list | while read i; do echo 'MEGATEXT' >> "$i"; done
работает ничем не хуже...
слава роботам!
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

elide писал(а):
15.05.2006 19:22

Код: Выделить всё

eval echo 'Текст, который надо добавить' $(for i in `cat /root/list`; do echo -n "| tee -a $i "; done) > /dev/null


А чем так плохо? :

Код: Выделить всё

for i in `cat /root/list`; do echo "text" >> ${i}; done
Спасибо сказали:
Stepbl4b
Сообщения: 14

Re: Есть список файлов в которые нужно добавить текст

Сообщение Stepbl4b »

Ну и загрузили вы меня).
Спасибо. А теперь задача усложняется:
добавляем текст CODE, только в том случае, если в файле не встречается определенное слово WORD.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

не совсем уверен:

Код: Выделить всё

for i in `cat /root/list`; do if [ "`grep WORD $i`" ]; then echo "text" >> ${i}; fi; done
Спасибо сказали:
Аватара пользователя
soko1
Сообщения: 265
Статус: лесной бздшник
ОС: freebsd7

Re: Есть список файлов в которые нужно добавить текст

Сообщение soko1 »

diesel писал(а):
15.05.2006 20:22
не совсем уверен:

Код: Выделить всё

for i in `cat /root/list`; do if [ "`grep WORD $i`" ]; then echo "text" >> ${i}; fi; done

Во, я точно по такому же принципу делал. Почему-то не работает=( Однако у меня немного по-другому сделано. Есть условие else (можно и без него, только не помню как в sh отрицание ставится (не '!' ли?)):

Код: Выделить всё

for i in `cat /root/test2/`; do
        if [ "`grep 'WORD' ${i}`" ]; then
                continue
        else
                echo "CODE" >> ${i}
        fi
done

Ведь надо дописывать в те файлы, в которых нет указанной фразы...
Хотя по логике, grep 'WORD' в любом случае выполнится (есть там там эта фраза, или ее нет...), поэтому до else может и не дойти.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

soko1 писал(а):
15.05.2006 20:30
diesel писал(а):
15.05.2006 20:22

не совсем уверен:

Код: Выделить всё

for i in `cat /root/list`; do if [ "`grep WORD $i`" ]; then echo "text" >> ${i}; fi; done

Во, я точно по такому же принципу делал. Почему-то не работает=( Однако у меня немного по-другому сделано. Есть условие else (можно и без него, только не помню как в sh отрицание ставится (не '!' ли?)):

Код: Выделить всё

for i in `cat /root/test2/`; do
        if [ "`grep 'WORD' ${i}`" ]; then
                continue
        else
                echo "CODE" >> ${i}
        fi
done

Ведь надо дописывать в те файлы, в которых нет указанной фразы...
Хотя по логике, grep 'WORD' в любом случае выполнится (есть там там эта фраза, или ее нет...), поэтому до else может и не дойти.


если в файлы в которых нет указанной фразы то if [ ! "`grep 'WORD' ${i}`" ]; then
Спасибо сказали:
Аватара пользователя
soko1
Сообщения: 265
Статус: лесной бздшник
ОС: freebsd7

Re: Есть список файлов в которые нужно добавить текст

Сообщение soko1 »

diesel писал(а):
15.05.2006 20:52
если в файлы в которых нет указанной фразы то if [ ! "`grep 'WORD' ${i}`" ]; then
Значит continue с else выбрасываем:

Код: Выделить всё

for i in `cat /root/test2/`; do
        if [ ! "`grep 'WORD' ${i}`" ]; then
                echo "CODE" >> ${i}
        fi
done

Но всеравно не пашет. И я знаю даже почему=) Просто не приходит в голову как это сделать по другому :blink:
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

Код: Выделить всё

$ for i in `ls .`; do echo $i `cat $i`; done
file1
file2 WORD
file3
file4
file5 WORD
list ./file4 ./file2 ./list ./file5 ./file1 ./file3
$ for i in `cat list`; do if [ ! "`grep WORD $i`" ]; then echo "WORD" >> ${i}; fi; done
$ for i in `ls .`; do echo $i `cat $i`; done
file1 WORD
file2 WORD
file3 WORD
file4 WORD
file5 WORD
list ./file4 ./file2 ./list ./file5 ./file1 ./file3 WORD


вот попробовал - работает.

soko1 писал(а):
15.05.2006 21:02
for i in `cat /root/test2/`; do


а че пишет када делаете cat <название директории> ?

Код: Выделить всё

$ cat test/
cat: test/: Is a directory


так конечно ничерта не добавит.
Спасибо сказали:
jsv
Сообщения: 67

Re: Есть список файлов в которые нужно добавить текст

Сообщение jsv »

я бы сделал что-то вроде:

Код: Выделить всё

for f in $(grep -L  'WORD' /root/test2/*); do echo "CODE" >> $f; done
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

jsv писал(а):
15.05.2006 21:19
я бы сделал что-то вроде:

Код: Выделить всё

for f in $(grep -L  'WORD' /root/test2/*); do echo "CODE" >> $f; done


в исходной задаче список файлов был в файле ... или я не так исходную задачу понял.
Спасибо сказали:
Аватара пользователя
soko1
Сообщения: 265
Статус: лесной бздшник
ОС: freebsd7

Re: Есть список файлов в которые нужно добавить текст

Сообщение soko1 »

diesel писал(а):
15.05.2006 21:17
а че пишет када делаете cat <название директории> ?

Код: Выделить всё

mailserver# cat /root/test2/
s
 .gp
    ...2.swpxmailserver#

а вообще, я забыл '*' добавить:)
Спасибо сказали:
jsv
Сообщения: 67

Re: Есть список файлов в которые нужно добавить текст

Сообщение jsv »

а, да... извиняюсь, недочитал :)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

soko1 писал(а):
15.05.2006 21:21
diesel писал(а):
15.05.2006 21:17

а че пишет када делаете cat <название директории> ?

Код: Выделить всё

mailserver# cat /root/test2/
s
 .gp
    ...2.swpxmailserver#

а вообще, я забыл '*' добавить:)


т.е. задача решена?
Спасибо сказали:
Аватара пользователя
soko1
Сообщения: 265
Статус: лесной бздшник
ОС: freebsd7

Re: Есть список файлов в которые нужно добавить текст

Сообщение soko1 »

diesel писал(а):
15.05.2006 21:25
т.е. задача решена?
Я не говорил что она решена=) Тут нужно чтобы спецы посмотрели и оценили.
На мой взгляд ошибка в условии. Т.к. это эквивалентно тому, что написать на Си условие:

Код: Выделить всё

if (i = 1) /* вместо == */

Получится что i просто присвоилась единица, а сравнения ни с чем не произошло. Тоесть, когда мы пишем if [ "`grep WORD /что-то_там`" ], то выполняется просто grep и код программы, которые после then...
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

soko1 писал(а):
15.05.2006 21:34
diesel писал(а):
15.05.2006 21:25

т.е. задача решена?
Я не говорил что она решена=) Тут нужно чтобы спецы посмотрели и оценили.
На мой взгляд ошибка в условии.


По-моему у тебя ошибка не в условии а в цикле for в файлах которые в test2 лежат - списки файлов или файлы которые нада менять?

cat /root/test2/* показует содержимое всех файлов в этой директории - тебе точно это нада.
Спасибо сказали:
Аватара пользователя
soko1
Сообщения: 265
Статус: лесной бздшник
ОС: freebsd7

Re: Есть список файлов в которые нужно добавить текст

Сообщение soko1 »

diesel писал(а):
15.05.2006 21:40
По-моему у тебя ошибка не в условии а в цикле for в файлах которые в test2 лежат - списки файлов или файлы которые нада менять?
Смотрите update моего предыдущего сообщения. Насчет cat'а вы правы (ЗЫ все, я домой - подумаю над этой задачей).
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

soko1 писал(а):
15.05.2006 21:34
На мой взгляд ошибка в условии. Т.к. это эквивалентно тому, что написать на Си условие:

Код: Выделить всё

if (i = 1) /* вместо == */

Получится что i просто присвоилась единица, а сравнения ни с чем не произошло. Тоесть, когда мы пишем if [ "`grep WORD /что-то_там`" ], то выполняется просто grep и код программы, которые после then...


man bash
man test
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Есть список файлов в которые нужно добавить текст

Сообщение KiWi »

Вообще, лично я перестал любить for xxx in xxx в случаях, когда нужны полные строки(а в данном случае это так), ибо разделяется ещё и по пробелам, так что read мой выбор :-)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

IFL писал(а):
15.05.2006 22:15
Вообще, лично я перестал любить for xxx in xxx в случаях, когда нужны полные строки(а в данном случае это так), ибо разделяется ещё и по пробелам, так что read мой выбор :-)


Видимо вы правы - файлы с которыми мне доводится иметь дело без пробелов. Вон смотрю read встроен в bash так что даже быстрее с read должно быть. :)
Спасибо сказали:
Nab
Сообщения: 257

Re: Есть список файлов в которые нужно добавить текст

Сообщение Nab »

Код: Выделить всё

for i in `ls /root/test2/`; do [ "`grep $WORD ${i}`" ] || echo $CODE >> ${i}; done

виноват, не заметил что из файла список брать надо, тогда

Код: Выделить всё

for i in `cat /root/list.txt`; do [ "`grep $WORD ${i}`" ] || echo $CODE >> ${i}; done

или как сказал elide, только уже с условием

Код: Выделить всё

cat /root/list.txt | while read i; do [ "`grep $WORD ${i}`" ] || echo $CODE >> ${i}; done
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
valeri_ufo
Бывший модератор
Сообщения: 274
Статус: Everywhere, yet nowhere

Re: Есть список файлов в которые нужно добавить текст

Сообщение valeri_ufo »

Причём тут тематический флейм то если вопрос по программированию? Переношу тему.
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: Есть список файлов в которые нужно добавить текст

Сообщение elide »

(Nab @ May 16 2006, в 00:50) писал(а):как сказал elide, только уже с условием

Код: Выделить всё

cat /root/list.txt | while read i; do [ "`grep $WORD ${i}`" ] || echo $CODE >> ${i};done
все еще проще.

Код: Выделить всё

cat /root/list.txt | while read i; do grep -q "$WORD" "$i" || echo $CODE >> "$i"; done
и не надо городить огород из ["``"]
слава роботам!
Спасибо сказали:
Stepbl4b
Сообщения: 14

Re: Есть список файлов в которые нужно добавить текст

Сообщение Stepbl4b »

все еще проще.

Код: Выделить всё

cat /root/list.txt | while read i; do grep -q "$WORD" "$i" || echo $CODE >> "$i"; done
и не надо городить огород из ["``"]

Вот. Это наверное то что нужно.
Благодарю.

А теперь еще немного (ну совсем чуть-чуть) усложним задачу, вместо чтения списка из файла склеим список из результата выполнения нескольких find'ов и выведем в результате сколько файлов всего нашли и сколько пропатчили.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

Stepbl4b писал(а):
16.05.2006 13:02
А теперь еще немного (ну совсем чуть-чуть) усложним задачу, вместо чтения списка из файла склеим список из результата выполнения нескольких find'ов и выведем в результате сколько файлов всего нашли и сколько пропатчили.


А можно полностью задачу? :) :) :)
Спасибо сказали:
Nab
Сообщения: 257

Re: Есть список файлов в которые нужно добавить текст

Сообщение Nab »

Уважаемый, Вы прикалуетесь?

Такое впечатление, что мы Ваши ученики, и Вы нам ставите задачи, потихоньку усложняя.

Вы внимательно читали вот этот документ: http://ln.com.ua/~openxs/articles/smart-questions-ru.html ?

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

Вы написали что последний ответ от elide вас устраивает и тут же усложняете задачу до такой степени что его ответ никуда не годиться потому как удобнее всего его переделывать имеено с IF.

Хотя конечно можно извратиться в одну строку, но мы здесь не играем в perl-golf.

Давайте не тянуть резину, а нормально раскажите что именно у Вас не получается, потому как так и хочется отправить читать man.
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Есть список файлов в которые нужно добавить текст

Сообщение diesel »

Nab писал(а):
16.05.2006 17:48
Вы написали что последний ответ от elide вас устраивает и тут же усложняете задачу до такой степени что его ответ никуда не годиться потому как удобнее всего его переделывать имеено с IF.


Не забываем что по мнению вопрошающего вариант с if вкорне неправилен :) :):)
Спасибо сказали:
Nab
Сообщения: 257

Re: Есть список файлов в которые нужно добавить текст

Сообщение Nab »

diesel писал(а):
16.05.2006 18:47
Не забываем что по мнению вопрошающего вариант с if вкорне неправилен :) :):)

Да уж учителю виднее :)
Чтобы правильно задать вопрос, нужно знать больше половины ответа...
FREESCO in Ukraine
Спасибо сказали:
Stepbl4b
Сообщения: 14

Re: Есть список файлов в которые нужно добавить текст

Сообщение Stepbl4b »

Да ладно, что вы. Просто у меня со знанием bash очень слабовато.
Сам я пишу на пхп и эту задачу на нем давно решил, но возникают некоторые проблемы.
Поэтому приходится извращяться соединяя пхп и баш.

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

Задача у меня такая: искать все файлы соответствующие определенному запросу и, если в них еще не добавлен мой код, то добавить.


Еще раз прошу прощения за неправильное изложение просьбы.
Спасибо сказали: