LINUX.ORG.RU

как удалить из файла часть строк


0

0

Доброе утро!

Подскажите чем и как решить такую задачу: Есть текстовый файл вида:

bla bla bla
bla bla bla
bla bla bla
bla bla bla
---END OF PAGE---
bla bla bla
bla bla bla
bla bla bla
bla bla bla
---END OF PAGE---
bla bla bla
bla bla bla
bla bla bla
bla bla bla
---END OF PAGE---
bla bla bla
bla bla bla
bla bla bla
bla bla bla
---END OF PAGE---
bla bla bla
bla bla bla
bla bla bla
bla bla bla
.......

Как мне удалить из него часть текста между конкретными "---END OF PAGE---". К примеру между третим и пятым.

Спасибо.


[lg@seed ~]$ cat test
1 bla bla bla
2 bla bla bla
3 bla bla bla
4 bla bla bla
5 ---END OF PAGE---
6 bla bla bla
7 bla bla bla
8 bla bla bla
9 bla bla bla
10 ---END OF PAGE---
11 bla bla bla
12 bla bla bla
13 bla bla bla
14 bla bla bla
15 ---END OF PAGE---
16 bla bla bla
17 bla bla bla
18 bla bla bla
19 bla bla bla
20 ---END OF PAGE---
21 bla bla bla
22 bla bla bla
23 bla bla bla
24 bla bla bla
[lg@seed ~]$ grep -n END test|cut -d: -f1|sed -n "2p;4p"
10
20

Ну а дальше скормить полученные номера sed
[lg@seed ~]$ sed '10~20d' test
1 bla bla bla
2 bla bla bla
3 bla bla bla
4 bla bla bla
5 ---END OF PAGE---
6 bla bla bla
7 bla bla bla
8 bla bla bla
9 bla bla bla
11 bla bla bla
12 bla bla bla
13 bla bla bla
14 bla bla bla
15 ---END OF PAGE---
16 bla bla bla
17 bla bla bla
18 bla bla bla
19 bla bla bla
20 ---END OF PAGE---
21 bla bla bla
22 bla bla bla
23 bla bla bla
24 bla bla bla

anonymous
()
Ответ на: комментарий от anonymous

Дружище! Огромное тебе спасибо.

raw2
() автор топика
Ответ на: комментарий от nevar

Я чего-то наверное не догоняю:

cat different
#!/bin/bash
MIN=`grep -n END main | cut -d: -f1|sed -n "2p"`
MAX=`grep -n END main | cut -d: -f1|sed -n "4p"`
ARGUMENT=d
COMMAND=`echo sed  \'$MIN,$MAX$ARGUMENT\' main`
echo $MIN
echo $MAX
echo $COMMAND
$COMMAND

Результат выполнения:

17
36
sed '17,36d' main
sed: -e выражение #1, символ 1: неизвестная команда: `''
Причем если ввести вручную вот это:
sed '17,36d' main
То все корректно отрабатывает....

Гдя я туплю?

raw2
() автор топика
Ответ на: комментарий от raw2

удалить строки можно гораздо проще:

sed -i «/^stroka$/d» file

PS. Man sed, Luke

drull ★☆☆☆
()
Ответ на: комментарий от raw2
min=2;max=4;cat test |awk -F: 'BEGIN {RS="---END OF PAGE---"};{if (NR<'$min' || NR>'$max') { print $0,RS}}'

правда end of page печатается не совсем честным способом. А из скрипта стоит убрать как минимум кавычки вокруг \'$MIN,$MAX$ARGUMENT\'

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.