На основе разъяснения в комментариях к Вашему вопросу, чему-то как:
awk -v RS= -v ORS= 1
может сделать то, что Вы хотите.
Пустой разделитель записей является особым случаем, который говорит awk
это записывает, должны быть абзацы (разделенный последовательностями пустых строк). Установка выходного разделителя записей к пустой строке также означает, что содержание тех абзацев (без разделителей) должно быть связано. 1
просто истинное условие распечатать каждую запись.
Это однако опустило бы запаздывающую новую строку, таким образом, Вы могли сделать:
awk -v RS= -v ORS= '1;END{if (NR) printf "\n"}'
Если Вы хотите название ссылки:
sed 's@^<a href[^>]*>\([^<]*\)</a>$@\1@'
если все, что Вы хотите сделать, должно отбросить все снаружи 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
Если можно гарантировать один (правильно построенный) тег на строку, можно сделать:
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