나는 이런 것을 가지고 있습니다.
One blank line below
> This is a text
> This is another line of text
One blank line above
이런 것을 얻으려고 노력하고 있습니다.
One blank line below
<blockquote>
> This is a text
> This is another line of text
</blockquote>
One blank line above
이것을 시도했습니다.
sed 's/^\n\(>\)/\r<blockquote>\r\1/g' test.txt
and
sed 's/^\(>.*\)\n$/\1\r<\/blockquote>\r/g' test.txt
이 정규식은 vim(8.1)에 있을 때 잘 작동하지만 쉘(bash)에서 시도할 때 어떤 결과도 볼 수 없습니다. 쉘에서 이것을 실행하면 아무것도 바뀌지 않는 것 같습니다. 여기서 내가 어디서 잘못됐나요?
답변1
awk
이를 달성하기 위해 상태 머신을 사용할 것입니다 . 플래그를 사용하여 blank
빈 block
줄과 블록을 나타냅니다.
awk '
/^$/ { blank++ } # Blank line
blank && /^>/ { blank=0; block++; print "<blockquote>" } # First ">" line after blank
block && blank { block=0; print "</blockquote>" } # First blank after ">"
/^./ { blank=0 } # Non-blank line
{ print } # Print the input data
'
테스트 데이터
One blank line below
> This is a text
> This is another line of text
One blank line above
------------------------------------
One blank line below
> This is a text
> This is another line of text
One blank line above
------------------------------------
One blank line below
> This is a text
> This is another line of text
One blank line above
산출
One blank line below
<blockquote>
> This is a text
> This is another line of text
</blockquote>
One blank line above
------------------------------------
One blank line below
> This is a text
> This is another line of text
One blank line above
------------------------------------
One blank line below
<blockquote>
> This is a text
</blockquote>
<blockquote>
> This is another line of text
</blockquote>
One blank line above