Удалить все строки в файле, идущие после заданной

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

CewrioR
Сообщения: 45

Удалить все строки в файле, идущие после заданной

Сообщение CewrioR »

Нужно удалить все строчки, после заданной (по номеру строки или ее содержанию) sed '/содержание_строки/q' - не работает. Как правильно сделать?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: Удалить все строки в файле, идущие после заданной

Сообщение /dev/random »

CewrioR писал(а):
27.01.2013 22:59
Нужно удалить все строчки, после заданной (по номеру строки или ее содержанию) sed '/содержание_строки/q' - не работает. Как правильно сделать?

Ваш вариант выведет на стандартный вывод все строки, идущие до заданной, не включая её.

Если это и есть то, что вам нужно, то должно работать, а если не работает, приведите подробности.

Если вам нужно вывести и указанную строку тоже, можете заменить "q" на "{p;q}".

Если вам нужно вывести их обратно в файл, а не в stdout, укажите опцию "-i".

А вообще, вместо "не работает" следует описывать, какого результата ожидали и какой получили.
Спасибо сказали:
CewrioR
Сообщения: 45

Re: Удалить все строки в файле, идущие после заданной

Сообщение CewrioR »

#!/bin/bash

declare -i c=0

while true
do

sed '/done/,$d' /etc/init.d/generator

c=$(( c + 1 ))
echo "$c" >> /etc/init.d/generator

sleep 5
done


Ожидал удаления строк, создаваемых после done.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: Удалить все строки в файле, идущие после заданной

Сообщение /dev/random »

CewrioR писал(а):
27.01.2013 23:16
Ожидал удаления строк, создаваемых после done.

Вы не написали, чем отличается результат от ожидания, и мне опять приходится гадать. Вы ожидали, что они удаляться _прямо в файле_, а вместо этого результат удаления _вывелся в терминал_, а файл остался неизменным? Тогда, как я написал выше, вам нужна опция "-i". Нужно, чтобы сама строка done не удалялась? Это я тоже написал выше. Нужно что-то другое? Тогда по-прежнему непонятно, что именно.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21258
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Удалить все строки в файле, идущие после заданной

Сообщение Bizdelnick »

По номеру - очень просто: head -n <number> <file>
По содержимому - чуть сложнее, например так: grep -B 1000 <regexp> (вместо 1000 подставить число, заведомо превышающее число строк в файле)
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
CewrioR
Сообщения: 45

Re: Удалить все строки в файле, идущие после заданной

Сообщение CewrioR »

/dev/random писал(а):
27.01.2013 23:33
CewrioR писал(а):
27.01.2013 23:16
Ожидал удаления строк, создаваемых после done.

Вы не написали, чем отличается результат от ожидания, и мне опять приходится гадать. Вы ожидали, что они удаляться _прямо в файле_, а вместо этого результат удаления _вывелся в терминал_, а файл остался неизменным? Тогда, как я написал выше, вам нужна опция "-i". Нужно, чтобы сама строка done не удалялась? Это я тоже написал выше. Нужно что-то другое? Тогда по-прежнему непонятно, что именно.

Все, я вас понял. Ключ -i это то что мне было нужно. Спасибо
Спасибо сказали: