Используя sed (?), Чтобы извлечь один экземпляр строки, которая повторяется в исходной строке
ВХОД:
<a href=FII/FOO./>FOO</a>
ВЫВОД:
- Чистая замена всех вхождений двух строк с помощью sed
- Удалите и замените две конкретные строки с помощью команды sed
- проверить рекурсивный поиск sed и заменить перед запуском
- Ошибка RE: операнд-оператор повторения недействителен
- в чем смысл этой команды sed? sed '# 012 / \ n / g'
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 ~]
- Sed: как заменить 0 и:?
- Что делает команда sed?
- Может ли sed заменить новые символы линии?
- SED Использование правильно изменить линию
- Печать предыдущей строки после сопоставления шаблонов с помощью sed?
- Текстовое поле с дублирующейся информацией
- Почему sed дает мне эту ошибку: ... неизвестная команда: `^ '
- sed, получив ошибку: sed -e выражение # 1, команда char 28: unterminated `s '
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
- Создание grub.cfg без установленной Linux
- Как переместить панель gnome между мониторами без gnome-settings-daemon в xmonad?