2010-09-16 3 views
0

На самом деле было бы полезно помочь в этом.Очень простая замена с помощью sed

Я использую sed для создания файла CSV. По сути, несколько html-файлов объединяются в один файл html, и sed затем используется для удаления всех нежелательных изображений и т. Д., Чтобы перейти к исходным столбчатым данным.

У меня все это работает, но я застрял на последнем бит.

То, что я хочу сделать, это очень простой - я хочу, чтобы заменить следующие строки:

"a variable string" 
"end td" 
"begin td" 

с одной строкой:

"a variable string" 

(с символом табуляции в конце этого линия)

Я ИСПОЛЬЗУЮ DOS.

Как вы видите, я новичок во всем этом. Если бы я мог получить эту работу, это спасло бы меня много времени в будущем, так что я был бы рад помочь. На данный момент я должен вставить некоторые html-заголовки обратно в текстовый файл, открыть его в редакторе html, выбрать таблицу, а затем вставить ее в таблицу, которая немного больна.

P.S. есть ли простой способ заставить sed удалить скобки '(' и ')' из данной строки?

+2

DOS? Ты злишься? (Есть sed для DOS?) –

+0

да: http://gnuwin32.sourceforge.net/packages/sed.htm sed позволил мне вытащить фрагменты текста из файла HTML, а затем сбросить в новый файл – Rhys

+0

I подозревают, что это не DOS, но это оболочка CMD в Windows. –

ответ

1

Я сомневаюсь, что это то, чего вы действительно хотите, но это то, о чем вы просили.

sed "s/\"a variable string\"/&\t/; s/\"end td\"//; s/\"begin td\"//" inputfile 

Что вы, вероятно, захотите сделать, это заменить их, когда они появляются последовательно. Вот как вы можете сделать это:

sed "1{N;N}; /\"a variable string\"\n\"end td\"\n\"begin td\"/ s/\n.*$/\t/;ta;bb;:a;N;N;:b;$!P;N;D" inputfile 

Это удалит все скобки в файле:

sed "s/[()]//g" inputfile 

Для выбора конкретных строк, вы могли бы сделать что-то вроде этого:

sed "/foo/ s/[()]//g" inputfile 

который будет делать только замену, если слово «foo» находится где-то на линии.

Редактировать: Изменены одинарные кавычки в двойные кавычки для размещения GNUWin32 и CMD.EXE.

+0

cmd.exe ненавидит одинарные кавычки. 'sed" ... "file' – ghostdog74

+1

@ user229426: Я просто попробовал Cygwin' sed' из приглашения 'CMD', и он работал отлично с одинарными кавычками. Когда я попробовал его с помощью GNUWin32 'sed', я получил ошибку, жалуясь на одинарные кавычки. Я отредактирую свой ответ. –

+0

Вау - благодарю вас за то, что вы все время отвечаете. – Rhys

0

Предыдущий комментарий, который я оставил, кажется, не были сохранены - так будет пытаться снова

Код для удаления (и) работал отлично благодаря

Вы правы - я смотрел сливаться 3 строки в одну строку, поэтому второй пример, который вы дали, где он выглядит, как чтение двух следующих строк в пространстве шаблонов, выглядит более перспективным. Однако выход не был тем, что я ожидал.

Теперь я понимаю, что код должен быть более сложным, и я больше не хочу беспокоить вас как мой ручной метод впрыскивания некоторого кода html в текстовый файл и его открытие в Openoffice и вставке в электронную таблицу требуется всего несколько секунд, и я чувствую, что вручную создавать кодировку sed для этого будет кошмаром.

По сути правила для преобразования HTML должно быть: [каждый тег был отформатирован, чтобы он отображался на своей собственной линии] я дал пример входного файла и желаемый выходной файл ниже для справки

1) если < тр> следует < тд> на следующей строке полностью удалить < тр> и < TD> линии [т.е. не выводить возврат каретки], а в строке NEXT придерживаться буквы «в начале этой строки» [не имеет значения, что возврат каретки в конце этой строки будет изменен позже]

2) если </TD> следует < тд> полностью удалить обе эти две строки [снова не выводить возврат каретки после этих линий] и на предыдущей строке вывода а», [не выводить возврат каретки] и NEXT line stick "в начале строки [не беспокойтесь о возврате конечной каретки позже будет изменен]

3) если </td> следует за </tr> удалите оба из этих строки и в предыдущей строке добавьте «в конец строки и окончательный c возврат брака.

Я дал пример того, что вход и желаемый результат будет:

ввод: http://medinfo.redirectme.net/input.txt

[разыскиваемый файл будет размещен в следующем сообщении - эта плата не позволит новым пользователям опубликуйте сообщение с более чем одной гиперссылкой!]

есть дополнительная проблема, что столбец адресов находится на нескольких строках входного файла - это можно свести к одной строке, посмотрев, был ли первый символ NEXT строка - это «Если это не так, не выводите возврат каретки в конце текущего li пе

Уф, который был кошмар просто впечатать никогда не возражаю на самом деле код. Но еще раз спасибо за вашу помощь в получении этого! :-)

Смежные вопросы