Tôi đang vật lộn để thêm <dl>
các thẻ xung quanh một danh sách định nghĩa với sed và có lẽ có một cách dễ dàng hơn để làm điều đó (tôi rất muốn biết).
Tôi muốn tìm kiếm một tập tin cho bất kỳ dòng nào có chứa một <dt>
, nhưng chỉ khớp nếu dòng trước đó không chứa <dt>
hoặc <dd>
. Khi một trận đấu được tìm thấy, chèn một <dl>
.
Nỗ lực của tôi cho đến nay (hoàn toàn không phù hợp):
sed '/^((?!<dt>).)*$/ {
N
/<dt>/ {
s/<dt>/<dl><dt>/
}
}' file
Và tập tin
# TODO #
* Set up mail transfer agent
* Reconfigure timezone
```bash
dpkg-reconfigure tzdata
```
# Hardware #
<dt>RAM</dt>
<dd>2GB</dd>
# Partitions #
<dt>`/dev/sda1`</dt>
<dd>/boot</dd>
<dt>`/dev/sda2`</dt>
<dd>/</dd>
Mục đích của tất cả những điều này là để viết một trình phân tích cú pháp chuyển đổi đánh dấu wiki moinmoin thành đánh dấu, để chuyển sang một công cụ wiki mới. Danh sách định nghĩa hiện được thực hiện theo quy tắc sau:
sed -i 's/^ \(.*\):: \(.*\)$/ <dt>\1<\/dt>\n <dd>\2<\/dd>/' file
Tôi muốn đầu ra trông như thế này:
# TODO #
* Set up mail transfer agent
* Reconfigure timezone
```bash
dpkg-reconfigure tzdata
```
# Hardware #
<dl>
<dt>RAM</dt>
<dd>2GB</dd>
</dl>
# Partitions #
<dl>
<dt>`/dev/sda1`</dt>
<dd>/boot</dd>
<dt>`/dev/sda2`</dt>
<dd>/</dd>
</dl>
Lưu ý rằng tôi muốn html hợp lệ càng nhiều càng tốt. Cần phải có một thẻ đóng cho mỗi thẻ mở.
<dt>...</dt>\n<dd>...</dt>\n
thẻ tuần tự trong một cặp khác <dl>...</dl>
hoặc toàn bộ một chuỗi các cặp được bao quanh?