ラインブロックを後続のラインブロックと組み合わせる

ラインブロックを後続のラインブロックと組み合わせる

レッスンスライドからエクスポートされたいくつかのテキストを処理するために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
    }
}

関連情報