Sed는 주변의 숫자 내용을 대체합니다.

Sed는 주변의 숫자 내용을 대체합니다.

HTML 출력을 수정 중입니다.

<td nowrap align="right">4683</td>

문서에서 이 패턴의 모든 항목을 바꾸고 싶습니다. 여기서 4683은 주어진 수의 다양한 길이일 수 있습니다.

따라서 이 선은 다음과 같습니다.

<td nowrap align="right"><a href="4683.html">link</a></td>

이런 걸 찾고 있는 것 같아요

sed -i 's/align="right">/([0-9]*)/<\/td>/align="right"><a href="4683.html">link<\/a><\/td>/g' index.html

나는 정규식이 인용되거나 대체되거나 올바르게 구성되지 않을 수 있다는 것을 이해합니다.

답변1

어때요?

sed 's_^\([^>]\+>\)\([[:digit:]]\+\)_\1<a href="\2.html">link</a>_' file.txt
  • 입력 에 있는 형식 이 아닌 대체 패턴 형식을 사용 _하고 있습니다 .sed//

  • ^\([^>]\+>\)가장 많은(포함) 문자를 찾아 >그룹에 넣습니다.

  • \([[:digit:]]\+\)언급된 번호를 찾아서 나중에 사용할 수 있도록 그룹에 넣습니다.

  • 교체 패턴은 첫 번째 일치 그룹이 \1<a href="\2.html">link</a>어디에 있고 두 번째 일치 그룹이 어디에 있는지입니다.\1\2

    예:

    $ sed 's_^\([^>]\+>\)\([[:digit:]]\+\)_\1<a href="\2.html">link</a>_'<<<'<td nowrap align="right">4683</td>'
    
    <td nowrap align="right"><a href="4683.html">link</a></td>
    

행의 다른 곳에 숫자가 없으면 간단히 다음을 사용할 수 있습니다.

sed 's_[[:digit:]]\+_<a href="&.html">link</a>_' file.txt

예:

$ sed 's_[[:digit:]]\+_<a href="&.html">link</a>_'<<<'<td nowrap align="right">4683</td>'

<td nowrap align="right"><a href="4683.html">link</a></td>

답변2

이 시도,
sed -ri 's/([0-9]+)/<a href=\"&.html\">link<\/a>/g' index.html

관련 정보