강의 슬라이드에서 내보낸 일부 텍스트를 처리하기 위해 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
}
}