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

ВХОД:

<a href=FII/FOO./>FOO</a> 

ВЫВОД:

 FOO 

В: Как я могу заменить INPUT на OUTPUT? FII и «./>» являются ПОСТОЯННЫМИ. FOO может отличаться от любого английского письма и «-» и «.».

ОБНОВЛЕНИЕ: (уточнить «FOO»)

 FOO=ASD then: <a href=FII/ASD./>ASD</a> FOO=XYZ <a href=FII/XYZ./>XYZ</a> 

UPDATE2: (этот не работает: O)

 [user@notebook ~] echo '<a href=FII/FOO./>FOO</a>' <a href=FII/FOO./>FOO</a> [user@notebook ~] echo '<a href=FII/FOO./>FOO</a>' | sed 's/>[ \t]*\([^ \t]\+\)[ \t]*</\1/' <a href=FII/FOO./FOO/a> [user@notebook ~] 

3 Solutions collect form web for “Используя sed (?), Чтобы извлечь один экземпляр строки, которая повторяется в исходной строке”

Если вы хотите, чтобы имя ссылки:

 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 
  • Как я могу заставить команду sed выполнять постоянные изменения в файле?
  • sed конвертировать 4 пробела в 2
  • Как я могу заставить мою команду sed работать на OSX, а также Ubuntu
  • удалить всю строку с sed?
  • sed заменяет только строки с соответствующими группами
  • Как sed -e /// 'все, кроме определенного шаблона?
  • Sed для сохранения строк (строк) заголовка (строк) + соответствующих строк
  • Что случилось с этим выражением sed?
  • Confused by sed output при использовании N. Кто-нибудь может объяснить эти результаты?
  • как сопоставить несколько шаблонов и изменить одну часть с sed
  • Как изменить все строки, состоящие из одного символа «0», на другое?
  • Linux и Unix - лучшая ОС в мире.