이것을 어떻게 수정할 수 있습니까?
<a href="http://foo.bar1">asfdlksafbar1qsasadf</a><br>
<a href="http://foo.bar2">svasfbar2saldkfj</a><br>
<a href="http://foo.bar3">safdfrhbar3saljfd</a><br>
<a href="http://foo.bar4">erasfasfbar4asfer</a><br>
이에?
<a href="http://foo.bar1">asfdlksafbar1qsasadf</a><br>
<a href="http://foo.bar2">svasfbar2saldkfj</a><br>
<a href="http://foo.bar3">safdfrh<font style=BACKGROUND-COLOR:red>bar3</font>saljfd</a><br>
<a href="http://foo.bar4">erasfasfbar4asfer</a><br>
따라서 bar3
다음 사이에 나타나는 경우에만 강조 표시됩니다.
">xxx</a>
ksh/OpenBSD를 사용하고 있습니다.
답변1
Perl을 사용하는 모든 시스템에는 다음 사항이 적용되어야 합니다.
perl -pe 's/(>.*)(bar3)(.*<\/a>)/$1<font style=BACKGROUND-COLOR:red>$2<\/font>$3/'
최소한 예제 파일에서는 올바른 작업을 수행합니다. 요청한 대로 의 정규식에는 s/regexp/replacement/
및 사이의 일치가 필요하지만 실제 HTML 입력이 그보다 더 복잡하다면 지나치게 단순화될 수 있습니다. 그렇다면 귀하의 요청에 대한 자세한 내용을 제공해 주십시오.bar3
>
</a>
답변2
노력하다
awk -v pattern="bar3" 'match($0, pattern){
beg = index( $0, ">")
content = gensub(/<.*$/, "", "", gensub(/^[^>]+>/, "", "", $0))
beg_str = index( content, pattern)
if (match (content, pattern)) {
print substr($0, 0, beg) substr(content, 0, beg_str - 1) "<fontstyle=BACKGROUND-COLOR:red>" substr(content, beg_str, length(pattern)) "</font>" substr(content, beg_str + length(pattern)) "</a><br>"
next
}
}
{print}' file.html
ksh에서 작동하길 바랍니다
답변3
이 솔루션에는 GNU 버전의 awk가 필요합니다.
awk '{ print gensub(/(>.*)(bar3)(.*<\/a>)/,"\\1<font style=BACKGROUND-COLOR:red>\\2</font>\\3","g") }' yourfile.html
답변4
대답은 입력에 대해 실제로 알고 있는 내용에 따라 달라집니다.
bar3
두 번째 항목을 둘러싸기를 원하는 경우 <font>
다음을 수행할 수 있습니다.
perl -pe 's#(.*bar3.*)(bar3)#$1<font style=BACKGROUND-COLOR:red>$2</font>#' file
또는
sed 's#\(.*bar3.*\)\(bar3\)#\1<font style=BACKGROUND-COLOR:red>\2</font>#' file
또는 GNU를 사용하십시오 sed
.
sed -r 's#(.*bar3.*)(bar3)#\1<font style=BACKGROUND-COLOR:red>\2</font>#' file
bar3
a와 a 사이에 발생하는 모든 것을 변경하고 그 사이에는 아무것도 변경하지 않으려면 다음을 수행할 수 있습니다.>
<
<
perl -pe 's#(>[^<]*)(bar3)([^<]*<)#$1<font style=BACKGROUND-COLOR:red>$2</font>$3#' file
또는
sed 's#\(>[^<]*\)\(bar3\)\([^<]*<\)#\1<font style=BACKGROUND-COLOR:red>\2</font>\3#' file
또는 GNU를 사용하세요.sed
sed -r 's#(>[^<]*)(bar3)([^<]*<)#\1<font style=BACKGROUND-COLOR:red>\2</font>\3#' file
bar3
줄의 33번째 위치에서 시작하는 항목을 바꾸려면 다음을 수행할 수 있습니다.
perl -pe 's#(.{32})(bar3)#$1<font style=BACKGROUND-COLOR:red>$2</font>#' file
또는
sed 's#\(.\{32\}\)\(bar3\)#\1<font style=BACKGROUND-COLOR:red>\2</font>#' file
또는 GNU를 사용하세요.sed
sed -r 's#(.{32})(bar3)#\1<font style=BACKGROUND-COLOR:red>\2</font>#' file
물론 다른 옵션도 있지만 입력 데이터가 얼마나 확실한지에 따라 항상 달라집니다.