1

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

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

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

2

 Консоль:

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

Был, был и весь вышел...

3

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

4

ai

ivan--b пишет:

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

Lupo Alberto⇓ пишет:

sed '/Remove\ it/,/Remove\ it/d' test.txt

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

5 (02.05.2013 11:05:54 отредактировано ivan--b)

yars пишет:

ai

ivan--b пишет:

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

Lupo Alberto⇓ пишет:

sed '/Remove\ it/,/Remove\ it/d' test.txt

ab Я только начинаю в этом разбираться, так что не удивляйтесь так пожалуйста.Можете посоветовать какую-нибудь книгу по написанию shell-скриптов?

6

http://tldp.org/LDP/abs/html/
http://www.bash-scripting.ru/abs/chunks/

Был, был и весь вышел...

7

Спасибо)))

8

P.S. Вот небольшие заметки от Даниеля Роббинса — основателя Gentoo и Funtoo. Мне очень нравятся bx
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

Был, был и весь вышел...

9

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

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

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.Для одного файла скрипт работает нормально. Можно конечно прочитать все файлы каждый раз изменяя имя файла в скрипте, но лень  ah . Можно ли как-нибудь сделать так что бы скрипт прочитал все файлы в директории обработал их и сохранял весь обработынай текст каждый раз в другой файл? К примеру файл, который нужно обработать, имеет имя 1.txt, а файл, в который будет направлен текст будет иметь имя с1.txt.Следующий файл 2.txt, а файл назначения с2.txt.И так до конца пока не будут обработаны все файлы.

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

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

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

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

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.В чем у меня может быть ошибка? bw

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

10

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

find -maxdepth 1 -type f | while read i; do 
   command "$i" >"new_$i"
done
95% процентов проблем находятся между клавиатурой и стулом.