Используя sed (?) для извлечения одного экземпляра строки, которая повторяется в исходной строке

На основе разъяснения в комментариях к Вашему вопросу, чему-то как:

awk -v RS= -v ORS= 1

может сделать то, что Вы хотите.

Пустой разделитель записей является особым случаем, который говорит awk это записывает, должны быть абзацы (разделенный последовательностями пустых строк). Установка выходного разделителя записей к пустой строке также означает, что содержание тех абзацев (без разделителей) должно быть связано. 1 просто истинное условие распечатать каждую запись.

Это однако опустило бы запаздывающую новую строку, таким образом, Вы могли сделать:

awk -v RS= -v ORS= '1;END{if (NR) printf "\n"}'
3
30.10.2013, 14:11
3 ответа

Если Вы хотите название ссылки:

sed 's@^<a href[^>]*>\([^<]*\)</a>$@\1@'
0
27.01.2020, 21:44

если все, что Вы хотите сделать, должно отбросить все снаружи href=FII/..../, я рекомендовал бы что-то как следующее (использование | sed-разделитель):

sed -e 's|^.*href=FII/\([A-Za-z.-]*\)\./>.*$|\1|'

пример:

$ echo "<a href=FII/ASD./>ASD</a>"|sed 's|^.*href=FII/\([A-Za-z.-]*\)\./>.*$|\1|'
ASD
$ echo "<a href=FII/XYZ./>XYZ</a>"|sed 's|^.*href=FII/\([A-Za-z.-]*\)\./>.*$|\1|'
XYZ
$ echo "<a href=FII/morgel.dorgel./>XYZ</a>"|sed 's|^.*href=FII/\([A-Za-z.-]*\)\./>.*$|\1|'
morgel.dorgel
0
27.01.2020, 21:44

Если можно гарантировать один (правильно построенный) тег на строку, можно сделать:

sed 's/^.*>[ \t]*\([^ \t]\+\)[ \t]*<.*$/\1/' your_file

Это не проверяет это FOO повторяется как в Вашем примере. Заменять только те экземпляры FOO это повторяется в разделителе открывающего тэга и теле тега, можно использовать это:

sed 's@< *a *href *= *FII/\([-a-zA-Z.]\+\) *\./\?> *\1 *< */ *a *>@\1@' your_file

То же в Perl для лучшей удобочитаемости:

perl -pe 's{
            < \s* a \s* href \s* = \s* FII/  # Constant part
               ([-a-zA-Z.]+)                 # Payload (saved in $1)
               \s*\./?\s*>                   # Optional space, ./ and >
               \s*\1\s*                      # Payload repeated
            <\s*/\s*a\s*>                    # Closing delimiter
           }{$1}x                            # Replace match with $1
' your_file
0
27.01.2020, 21:44
  • 1
    Спасибо!, но я создал UPDATE2 :( –  gasko peter 30.10.2013, 13:48
  • 2
    @gaskopeter Мое плохое. Ответ исправлен. –  Joseph R. 30.10.2013, 13:51

Теги

Похожие вопросы