Найти строки, которые не начинаются с "<", выполнить действие - PullRequest
6 голосов
/ 15 февраля 2010

Я использую vim и у меня большой текстовый файл, содержащий некоторые html, добавленные в throoghout. Я пытаюсь подготовить его для Интернета, и мне нужно добавить теги <p></p> в строки, которые еще не отформатированы. Вот пример того, что у меня есть:

Paragraph text one one line [... more ... ]
Other paragraph text on the next line [... more ... ]  
<h1>html element thrown in on its own line</h1>
More paragraph text [... more ... ]  
<!-- some other element (always own line) -->
There is still more text!

Я ищу способ поиска строк, которые не начинаются с символа < и для этих строк добавляют открывающие и закрывающие теги <p></p> ... так, чтобы после этого мой файл выглядит так:

<p>Paragraph text one one line [... more ... ] </p>
<p>Other paragraph text on the next line [... more ... ]   </p>
<h1>html element thrown in on its own line</h1>
<p>More paragraph text [... more ... ]   </p>
<!-- some other element (always own line ) -->
<p>There is still more text! </p>

Как найти строки, которые не соответствуют начальному < символу?

Ответы [ 5 ]

11 голосов
/ 15 февраля 2010
^([^<].*)$

Убедитесь, что ваши параметры запрещают "Точку, совпадающую с новой строкой", и замените на:

<p>$1</p>

Vim требует, чтобы вы избегали определенных персонажей, но у меня фактически нет vim, так что это мое лучшее предположение в целом правиле:

s:^\([^<].*\)$:<p>\1</p>:g
1 голос
/ 15 февраля 2010
:%s/^[^<].*/<p>&<\/p>/

альтернативно:

:v/^</s#.*#<p>&</p>#

это все, что нужно.

1 голос
/ 15 февраля 2010

вот логика. просмотрите файл, проверьте наличие < в начале строки, если нет, создайте новую строку с <p> и </p> и отобразите ее Там действительно нет необходимости в сложном регулярном выражении

с баш

#!/bin/bash
shopt -s extglob
while read -r line
do
    case "$line" in
        "<"*) echo $line ;;
        *) echo "<p>$line</p>";;
    esac   
done <"file"

с awk

$ awk '!/^</{$0="<p>"$0"</p>"}{print}' file

выход

$ awk '!/^</{$0="<p>"$0"</p>"}1' file
<p>Paragraph text one one line [... more ... ]</p>
<p>Other paragraph text on the next line [... more ... ]  </p>
<h1>html element thrown in on its own line</h1>
<p>More paragraph text [... more ... ]  </p>
<!-- some other element (always own line) -->
<p>There is still more text!</p>
0 голосов
/ 15 февраля 2010

Еще один способ сделать это:

:v/^</normal I<p>^O$</p>

^ O завершается нажатием CTRL + o

Или, если вы используете плагин round.vim :

:v/^</normal yss<p>
0 голосов
/ 15 февраля 2010

Это должно работать:

:%s/^\s*[^<]\+$/<p>&<\/p>/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...