Я в тупике.У меня есть HTML-файл, который я пытаюсь преобразовать в обычный текст, и я использую sed
для его очистки.Я понимаю, что sed
работает с потоком и работает по одной строке за раз, но есть способы сопоставления многострочных шаблонов.
Вот соответствующий раздел моего исходного файла:
<h1 class="fn" id="myname">My Name</h1>
<span class="street-address">123 street</span>
<span class="locality">City</span>
<span class="region">Region</span>
<span class="postal-code">1A1 A1A</span>
<span class="email">my@email.ca</span>
<span class="tel">000-000-0000</span>
Я бы хотел, чтобы это было сделано в следующем текстовом формате:
My Name
123 street
City Region 1A1 A1A
my@email.ca
000-000-0000
Ключ в том, что город, регион и почтовый индекс теперь находятся в одной строке.
Я использую sed -f commands.sed file.html > output.txt
иЯ полагаю, что следующая программа sed (commands.sed
) должна поместить его в этот формат:
#using the '@' symbol as delimiter instead of '/'
#remove tags
s@<.*>\(.*\)</.*>@\1@g
#remove the nbsp
s@\( \)*@@g
#add a newline before the address (actually typing a newline in the file)
s@\(123 street\)@\
\1@g
#and now the command that matches multiline patterns
#find 'City',read in the next two lines, and separate them with spaces
/City/ {
N
N
s@\(.*\)\n\(.*\)\n\(.*\)@\1 \2 \3@g
}
Кажется, имеет смысл.Все теги удаляются, а затем в одну помещаются три строки.
Но это не работает.Вот результат, который я получаю:
My Name
123 street
City <span class="region">Region</span> <span class="postal-code">1A1 A1A</span>
my@email.ca
000-000-0000
На мой (относительно неопытный) взгляд, похоже, что sed «забывает» сделанные изменения (снимая метки).Как бы я решил это?Есть ли решение написать файл после трех команд и перезапустить sed для четвертой?Я неправильно использую sed?Я неправильно понимаю «потоковую» часть?
Я использую Mac OS X 10.4.11 с оболочкой bash
и использую прилагаемую версию sed
.