LinuxForum.Fans
Тема

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

Автор: Cewrio 10 сообщений 5011 просмотров
#299084

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

#299097

Если устроит решение "в лоб" на Python 2.7 (по другому не умею), то:
С вводом строки по ходу выполнения скрипта

text
# coding: utf-8

strfile = open("str.txt") strlist = strfile.read().splitlines() strfile.close() ourstr = raw_input("Введите содержание строки") strindex = strlist.index(ourstr) needindex = strindex + 1 del strlist[needindex:]

strfile2 = open("str-fixed.txt", "w") for line in strlist: strfile2.write(line+"\n") strfile2.close()

С заранее заданной строкой

text
# coding: utf-8

strfile = open("str.txt") strlist = strfile.read().splitlines() strfile.close() ourstr = "Это наша строка" strindex = strlist.index(ourstr) needindex = strindex + 1 del strlist[needindex:]

strfile2 = open("str-fixed.txt", "w") for line in strlist: strfile2.write(line+"\n") strfile2.close()

В обоих случаях str.txt - исходный файл. На выходе будет получен str-fixed.txt, содержащий в себе строки с начала str.txt по заданную нами строку включительно.
И да, подразумевается, что совпадающих строк в исходном файле не будет (если будут - надо было в шапке топика предупреждать заранее).

#299125

Проблема решена таким образом: sed -i 'номер_строки_после_которой_удалять,$d' путь_к_файлу

#299144
"Cewrio" написал:
sed '/содержание_строки/q'

должно работать... оно печатает все строки ДО данной.
если нужно напечатать и текущую, то sed '/содержание_строки/{p;q}'

"Cewrio" написал:
Проблема решена таким образом: sed -i 'номер_строки_после_которой_удалять,$d' путь_к_файлу

плохое решение... лучше sed '<номер_строки>q'

#299145
Fat-Zer написал:

если нужно напечатать и текущую, то sed '/содержание_строки/{p;q}'

sed -i '/содержание_строки/{p;q}' путь_к_файлу
Мой скрипт правит сам себя, в итоге удаляет все после строки sed -i '/содержание_строки/{p;q}' путь_к_файлу ...

#299146

Разве что так sed -i 'номер_строки_после_которой_удалять{p;q}' путь_к_файлу

#299167
"xxblx" написал:
С заранее заданной строкой
text
# coding: utf-8

strfile = open("str.txt") strlist = strfile.read().splitlines() strfile.close() ourstr = "Это наша строка" strindex = strlist.index(ourstr) needindex = strindex + 1 del strlist[needindex:]

strfile2 = open("str-fixed.txt", "w") for line in strlist: strfile2.write(line+"\n") strfile2.close()

Перемудрил:)

text

#!/usr/bin/env python
#_*_ coding: utf-8 _*_

STRING = 'Test\n'

f = open('file.txt', 'r') lines = f.readlines() if STRING in lines: lines = lines[:lines.index(STRING)] f = open('file.txt', 'w') f.writelines(lines) f.close()

#299215
"-=Serj=-" написал:
Перемудрил:)

Мне по статусу положено, я - быдлокодер :D
разница между нашими вариантами в том, что у тебя откуда прочитало - туда и записало, есть проверка на наличие строки в файле и операция по определению номера элемента, удалению лишнего в одну строку уложена?
(я еще только учусь, по этому и уточняю что к чему, чтобы потом ничего не напутать)

"-=Serj=-" написал:
lines = lines[:lines.index(STRING)]

при таком раскладе саму то строку заданную в обновленный файл же не включит. надо index + 1 делать, чтобы удаляло со следующей строки после заданной. или я что-то путаю?

#299244
"xxblx" написал:
при таком раскладе саму то строку заданную в обновленный файл же не включит. надо index + 1 делать, чтобы удаляло со следующей строки после заданной. или я что-то путаю?

Верно.

"xxblx" написал:
strlist = strfile.read().splitlines()

ИМХО, проще

text
lines = f.readlines()
"xxblx" написал:
я - быдлокодер

Дык и я - так, писака :)

Войдите или зарегистрируйтесь, чтобы ответить.