빈 줄과 그 아래 줄을 다음으로 바꿉니다.sed 사용

빈 줄과 그 아래 줄을 다음으로 바꿉니다.sed 사용

나는 이런 것을 가지고 있습니다.

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이를 달성하기 위해 상태 머신을 사용할 것입니다 . 플래그를 사용하여 blankblock줄과 블록을 나타냅니다.

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

관련 정보