Использую энергию и имеют файл крупного текста, который содержит некоторый 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!
Я ищу способ искать строки, которые не начинаются с a <
символ и, для тех строк, добавляют открытие и закрытие <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>
Как я нахожу строки, которые не соответствуют запуску <
символ?
^([^<].*)$
Убедитесь, что в ваших параметрах не разрешено «Сопоставлять точку новой строки» и заменить на:
<p>$1</p>
Vim требует, чтобы вы экранировали определенные символы, но у меня фактически нет vim, так что это мое лучшее предположение для всего правила:
s:^\([^<].*\)$:<p>\1</p>:g
вот логика. просмотрите файл, проверьте <
в начале строки, если нет, создайте новую строку с
и
с bash
#!/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>
Белый - интересная бесплатная альтернатива.
-121--4379661-Общий способ сделать это - добавить все предметы из исходной коллекции в словарь, а затем удалить предметы из другой коллекции:
public static IEnumerable<T> Subtract<T>(IEnumerable<T> source, IEnumerable<T> other)
{
return Subtract(source, other, EqualityComparer<T>.Default);
}
public static IEnumerable<T> Subtract<T>(IEnumerable<T> source, IEnumerable<T> other, IEqualityComparer<T> comp)
{
Dictionary<T, object> dict = new Dictionary<T, object>(comp);
foreach(T item in source)
{
dict[item] = null;
}
foreach(T item in other)
{
dict.Remove(item);
}
return dict.Keys;
}
-121--4998132- :%s/^[^<].*/<p>&<\/p>/
или:
:v/^</s#.*#<p>&</p>#
это все, что необходимо.
Другой способ сделать это:
:v/^</normal I<p>^O$</p>
^ O выполняется нажатием CTRL + o
Или, если вы используете плагин Surround.vim :
:v/^</normal yss<p>