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