"ul"이 나타날 때마다 나는 다음과 같이 보이도록 해당(가장 안쪽에 포함된) "ul" 뒤에 "name: *****" 줄을 넣으려고 합니다.
앞으로:
<ul>
<ul>
<li href="https://www.deepl.com/translator">DeepL</li>
<li href="https://translate.google.com">Google Trad</li>
name: "Translate",
</ul>
<li href="https://www.youtube.com/feed/subscriptions">Youtube</li>
<ul>
<li href="https://www.facebook.com/">Facebook</li>
<li href="https://twitter.com/">Twitter</li>
<li href="https://www.instagram.com">Instagram</li>
<li href="https://discordapp.com">Discord</li>
name: "Network",
</ul>
name: "Fav",
</ul>
뒤쪽에:
<ul>
name: "Fav",
<ul>
name: "Translate",
<li href="https://www.deepl.com/translator">DeepL</li>
<li href="https://translate.google.com">Google Trad</li>
</ul>
<li href="https://www.youtube.com/feed/subscriptions">Youtube</li>
<ul>
name: "Network",
<li href="https://www.facebook.com/">Facebook</li>
<li href="https://twitter.com/">Twitter</li>
<li href="https://www.instagram.com">Instagram</li>
<li href="https://discordapp.com">Discord</li>
</ul>
</ul>
그래서 저는 다음과 같은 많은 것들을 테스트했습니다.
sed -i -e 'N;s/<ul>\([.\n]*\)\n\(.*\),/\2\n\1' fav.html
마지막 "ul" 다음의 "이름"이 항상 대체되는 것은 아니기 때문에 이것과 지금까지 내가 찾은 모든 것이 작동하지 않습니다. 누구든지 아이디어가 있다면 듣고 싶습니다.
답변1
에서는 이것이 불가능할 수도 있습니다 sed
. (챌린지가 발행되었습니다. 틀렸다는 것이 증명되기를 기다리고 있습니다.) 특별히 sed
해결책이 필요하다면 이 기사를 읽는 것을 중단하는 것이 좋습니다.
tac
나는 다음의 조합으로 이 작업을 수행 할 수 있었습니다 awk
.
tac fav.html | awk '
/<\/ul>/ { flag=1; level++; }
/<ul>/ { print save[level]; level--; }
flag && /name/ { flag=0; save[level] = $0; next; }
{ print; }
' | tac > fav.html.new && mv fav.html.new fav.html
tac fav.html
fav.html
Reverse( 뒤로 tac
철자 cat
)를 한 줄씩 실행하여 다음을 생성합니다.
</ul>
name: "Fav",
</ul>
name: "Network",
<li href="https://discordapp.com">Discord</li>
︙
<ul>
︙
<ul>
<ul>
코드의 처음 두 줄은 중첩 수준을 awk
계산합니다 . <ul>
역순이므로 </ul>
레벨이 증가하고 <ul>
레벨이 감소합니다. 가 표시되면 아래쪽에서 블록에 진입하고 있음을 나타내도록 </ul>
설정합니다 . 블록 의 맨 아래 근처에서 를 찾으면 이를 저장하고 해당 줄로 이동합니다( 줄을 인쇄하지 않고). a (즉, 블록의 시작 부분 ) 를 찾으면 자체적으로 인쇄하기 전에 저장된 내용을 인쇄합니다 .flag
<ul>
name
<ul>
next
name
<ul>
<ul>
name
<ul>
결승전에서는 tac
라인을 다시 뒤집어 대부분의 라인을 원래 위치로 되돌리고 모든 라인을 원래 위치로 되돌렸습니다.name
뒤쪽에해당 <ul>
.