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 구분 기호 사용):

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

관련 정보