%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9B%90%EB%9E%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%EC%84%9C%20%EB%B0%98%EB%B3%B5%EB%90%98%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98%20%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EB%A5%BC%20%EC%B6%94%EC%B6%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
입력하다:
<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