sed(?) を使用して、元の文字列から繰り返された文字列のインスタンスを抽出します。

sed(?) を使用して、元の文字列から繰り返された文字列のインスタンスを抽出します。

入力する:

<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>

アップデート2:(これはうまくいきません: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 -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

1行で正しい形式のラベルを確保できる場合は、次のようにします。

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

関連情報