输入:
<a href=FII/FOO./>FOO</a>
输出:
FOO
问:如何用输出替换输入? 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 ~]
答案1
如果您想要链接名称:
sed 's@^<a href[^>]*>\([^<]*\)</a>$@\1@'
答案2
如果您想做的就是丢弃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
答案3
如果您可以保证每行有一个(格式良好的)标签,您可以这样做:
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