Всем привет. Начитался описаний и примеров, но не нашёл то что мне нужно.
Не могу справиться с проблемой:
необходимо удалить строки содержащие некое выражение, но оставить строки содержащие другое выражение.
подобно замене sed '/baz/s/foo/bar/g' или sed '/baz/!s/foo/bar/g'
На примере:
в файле содержаться строки c "e-mail: "
спасибо, но примеры с grep и awk-ом не подходят, так как нужно именно удалять строки из текстового файла. Содержание примерно такое:
Показать
Т Е К С Т
Контактное лицо: Сан Саныч
Телефон 1: 3434343434
Телефон 2:
e-mail:
Город:
Организация: ООО СоюзКопоть
Дата добавления: 16 Ноя 2012
Многие поля остаются незаполненными. Файл и так объёмный, по этому хочу удалить ненужное
"Fat-Zer" написал:
sed '/^e-mail:\s$/d'
так тоже пробовал, но у меня это не работает, строки без адреса всёравно оставляет.
Так тоже не работает:
text
sed '/^e-mail:\( \)$/d'
Работает так:
sed -e '/@/!s/^e-mail:\( \)//g' или sed -e '/@/!s/^e-mail:\s//g' оставляя пустую строку.
но не работает sed '/@/!s/^e-mail:\s$//g' или sed '/@/!s/^e-mail:\s$//g
Хотя в файле после двоеточия стоит пробел и конец строки.
Я кажется разобрался в чём проблема:
текстовый файл создан из HTML, скаченного wget-ом путём удалением тегов и вырезания нужного/ненужного
На созданном с нуля *.txt файле sed '/^e-mail:\s$/d' работает, а на этом нет.
Проблема в конце строк.
Как исправить, подскажите plz
Хорошо, если всё в порядке, хотя странно... Ваша команда просто удалит последний символ. Я подобные «неправильные» строки исправляю так:
sed 's/\r//g' FILE
Спасибо.
sed 's/.$//' взял от сюда
Первый пример под заголовком "Преобразование и замена текста:"
Там пояснение к команде: (подразумевается что все строки заканчиваются с CR/LF)
Я её в самое начало скрипта вставил.
Если я правильно понял, то нужно удалить строки не только без email, но и все, у которых после двоеточия пусто:
text
#!/usr/bin/env python
#_*_ coding: utf-8 _*_
f = open ('file.txt', 'r')
lines = f.readlines()
for line in lines:
if not line.rstrip().split(':')[1]:
lines.remove(line)
f = open ('file.txt', 'w')
f.writelines(lines)
f.close()
f = open('file.txt', 'r')
lines = f.readlines()
lines = [line for line in lines if line.rstrip().split(':')[1]]
f = open('file.txt', 'w')
f.writelines(lines)
f.close()
Иначе получается редактирование списка во время итераций.