LinuxForum.Fans
Тема

Удаление из файла строк

Автор: ivan--b 10 сообщений 4562 просмотров
#318408

Есть некоторый файл, который имеет следующую условную структуру:

text

<это не нужно удалять>
<это нужно удалять>
<это не нужно удалять>

Можно ли написать скрипт,который бы удалял строки с определенной части файла и до определенной части файла?

#318415

[console]
lupo@gentoo-laptop /tmp % cat test.txt
Don't remove
Test0
Remove it
Test1 test2
test3
Test4
Remove it
Test5
test6
Don't remove
lupo@gentoo-laptop /tmp % sed '/Remove\ it/,/Remove\ it/d' test.txt
Don't remove
Test0
Test5
test6
Don't remove
[/console]

#318451

Lupo Alberto, спасибо за ответ. А как-нибудь с помощью команды sed это можно сделать?

#318453

o_O

"ivan--b" написал:
А как-нибудь с помощью команды sed это можно сделать?
"Lupo Alberto⇓" написал:
sed '/Remove\ it/,/Remove\ it/d' test.txt
#318610

yars написал:
o_O
[quote="ivan--b"]А как-нибудь с помощью команды sed это можно сделать?
"Lupo Alberto⇓" написал:
sed '/Remove\ it/,/Remove\ it/d' test.txt
[/quote]
:) Я только начинаю в этом разбираться, так что не удивляйтесь так пожалуйста.Можете посоветовать какую-нибудь книгу по написанию shell-скриптов?
#318613

P.S. Вот небольшие заметки от Даниеля Роббинса — основателя Gentoo и Funtoo. Мне очень нравятся ;)
http://www.funtoo.org/wiki/Bash_by_Example,_Part_1
http://www.funtoo.org/wiki/Bash_by_Example,_Part_2
http://www.funtoo.org/wiki/Bash_by_Example,_Part_3

http://www.funtoo.org/wiki/Awk_by_Example,_Part_1
http://www.funtoo.org/wiki/Awk_by_Example,_Part_2
http://www.funtoo.org/wiki/Awk_by_Example,_Part_3

http://www.funtoo.org/wiki/Sed_by_Example,_Part_1
http://www.funtoo.org/wiki/Sed_by_Example,_Part_2
http://www.funtoo.org/wiki/Sed_by_Example,_Part_3

#318618

Я много времени потеряю пока разбирусь, где у меня ошибка. Может кто-нибудь поможет мне?

Вообщем задача таже самая, но файл не один их несколько и они находять в директории copy. Я написал скрипт:

text

sed -n -e '/от куда нужно выводить/,/до куда нужно выводить/p'  copy/имя файла.txt >>copy/c3.txt
sed -n -e '/от куда нужно выводить/,/до куда нужно выводить/p'  copy/имя файла.txt >> copy/c3.txt
echo "нужный текст" >> copy/c3.txt
echo "нужный текст" >> copy/c3.txt

Сам скрипт находится в родительской директории copy.Для одного файла скрипт работает нормально. Можно конечно прочитать все файлы каждый раз изменяя имя файла в скрипте, но лень :[ . Можно ли как-нибудь сделать так что бы скрипт прочитал все файлы в директории обработал их и сохранял весь обработынай текст каждый раз в другой файл? К примеру файл, который нужно обработать, имеет имя 1.txt, а файл, в который будет направлен текст будет иметь имя с1.txt.Следующий файл 2.txt, а файл назначения с2.txt.И так до конца пока не будут обработаны все файлы.

Я сам пробовал дописать свой скрипт, но у меня где-то ошибки.Вот что я пробовал написать:

text

sed -n -e '/от куда нужно выводить/,/до куда нужно выводить/p'  copy/*.txt >>copy/с*.txt
sed -n -e '/от куда нужно выводить/,/до куда нужно выводить/p'  copy/*.txt >> copy/с*.txt
echo "нужный текст" >> copy/с*.txt
echo "нужный текст" >> copy/с*.txt

Файлы читаются все, но почему-то все данные сохраняются в один файл с*.txt

Пробовал и так:

text

i=*
sed -n -e '/от куда нужно выводить/,/до куда нужно выводить/p'  copy/имя файла.txt >>copy/c$i.txt
sed -n -e '/от куда нужно выводить/,/до куда нужно выводить/p'  copy/имя файла.txt >> copy/c$i.txt
echo "нужный текст" >> copy/c$i.txt
echo "нужный текст" >> copy/c$i.txt

На этот раз все данные сохраняюся в файл $i.txt.В чем у меня может быть ошибка? *SCRATCH*

А по окончании работы скрипта нужно чтобы файлы с которых считывался текст были удалены, а новые файлы были переименованы в название файлов,с которых считывался текст.Тоесть в их имени должно быть убрано "c".Например файлы имеют имена с1.txt c2.txt, а нужно чтобы они назывались с1.txt, c2.txt. Над этим я еще не думал, но думаю здесь у меня тоже будут ошибки. Может кто-нибудь посоветует как это сделать? *SCRATCH*

#318711

ivan--b, посмотри в ABS на то, как используются циклы.
будет что-то вроде:

text

find -maxdepth 1 -type f | while read i; do 
   command "$i" >"new_$i"
done
Войдите или зарегистрируйтесь, чтобы ответить.