라인 블록을 후속 라인 블록과 결합

라인 블록을 후속 라인 블록과 결합

강의 슬라이드에서 내보낸 일부 텍스트를 처리하기 위해 pdf2text를 사용하려고 합니다. 일부 슬라이드의 주요 내용은 다음과 같습니다.

title for the list
-
-
-
a bullet point text
another bullet point text
yet another bullet point text
- nested bullet point
- another nested bullet point
- yet another nested bullet point
title for the next list

다음과 같이 올바른 (마크다운) 목록에 연결하고 싶습니다.

title for the first list

-   a bullet point text
-   another bullet point text
-   yet another bullet point text
    -   nested bullet point
    -   another nested bullet point
    -   yet another nested bullet point

title for the next list

답변1

방금 bash 스크립트를 사용하여 수행했습니다.

#!/bin/bash
c=0
[[ $# -eq 0 ]] && { echo "Error: Please Specify Input file" >&2; exit 1; }

while read line
do
        if [[ $line = "-" ]]; then
                (( c++ ))
                if [[ $c -eq 1 ]]; then
                    echo ""
                fi
        elif [[ $line != "" ]] && [[ $c -ne 0 ]]; then
                echo "-   ${line}"
                (( c-- ))
                if [[ $c -eq 0 ]]; then
                    echo ""
                fi
        elif [[ $line =~ "- " ]] && [[ $c -ne 0 ]]; then
                echo "    $line"
        else
                echo "$line"
        fi
done < $1

테스트 및 사용된 입력 예입니다.

답변2

@Rahul에게 감사드립니다. 하지만 수정된 버전은 다음과 같습니다.

#!/bin/bash

if [[ -z "$1" || ! -f "$1" ]]; then
    printf "Usage: %s <FILE>\n" "$(basename $0)"
    exit 1
fi

c=0
eoli=0
pad=4

while read line
do
        if [[ "$line" = "-" ]]; then
                 (( c++ ))
        elif (( c > 0 )); then
                echo "- $line"
                ! (( --c )) && eoli=1
        elif ((eoli)) && [[ "$line" =~ ^-\  ]]; then
                printf "%-*s%s\n" $pad "" "$line"
        else
                eoli=0
                echo "$line"
        fi
done < "$1"

awk를 사용하세요:

#!/usr/bin/awk -f

BEGIN {
    c=0
    eoli=0
    pad=4
};

{
    if (/^-$/) { 
        ++c 
    } else if (c > 0) {
        printf "- %s\n", $0
        eoli = (--c == 0)
    } else if (eoli && /^- /) {
        printf  "%*s%s\n", pad, "", $0
    } else {
        eoli=0
        print $0
    }
}

관련 정보