인쇄용 Markdown 문서와 EPUB 파일을 준비 중입니다. EPUB 파일에서 단어 정의 각주를 제거하고 싶습니다.
제거하려는 각주 형식은 모든 영숫자 문자 집합(다른 문자 포함 )일 [mean-X]
수 있습니다 .X
-
나는 시도했다:
grep -o "\[\^mean-.*\]"
결과의 예:
[^mean-vicissitudes]
[^mean-immortality]
[^mean-ingot]
[^mean-remonstrance]
[^mean-libeller]
[^mean-debauched] and the most amorous[^mean-amorous]
[^mean-turpitude]
[^mean-debauched] drunken, licentious,[^mean-licentious]
[^mean-frivolous]
[^mean-despots]
[^mean-repentance]
[^mean-ignominy]
[^mean-vain]
[^mean-presumptuousness] haughtiness,[^mean-haughtiness]
같은 줄에 두 개 이상의 각주가 나타나면 정규식은 마지막 항목으로 확장됩니다 ]
.
나는 또한 다음을 시도했습니다.
grep -o "\[\^mean-.*\][^\[]"
여전히 원본과 같은 경우가 있으며 마지막 사례 뒤에 쉼표와 콜론을 캡처합니다]
.grep -o "\[\{1\}\^mean-.*\]"
그러나 그것은 문제를 해결하지 못합니다. 나는 그것이 단지 하나의 인스턴스를 캡처할 것이라고 생각합니다[
.grep -o "\[\^mean-.*\]\{1\}"
하지만 그것도 문제를 해결하지 못합니다. 나는 그것이 단지 하나의 인스턴스를 캡처할 것이라고 생각합니다]
.
grep을 사용하여 각주를 캡처하고 제거하는 방법(공백으로 바꾸는 대신, 대신)제거하다그들을)?
PS Windows용 Git Bash를 사용하고 있는데 명령어는 똑같은 것 같아요.
답변1
문제는 .*
그것을 표현하는 방식, 즉 "탐욕"입니다. 이렇게 하면 표현식이 ]
줄의 마지막 부분까지 ]
줄의 나머지 부분과 일치하게 됩니다. 대신, 표현의 이 부분을 당신이 직접 가능하다고 말하는 것, 즉 영숫자 합계와 일치하도록 만드세요 -
. 영숫자가 일치 [[:alnum:]]
하고 [[:alnum:]-]
괄호 안의 표현식이 대시와도 일치하도록 허용합니다.
\[\^mean-[[:alnum:]-]*\]
질문의 데이터에 대해 다음을 실행하십시오.
$ grep -o '\[\^mean-[[:alnum:]-]*\]' file
[^mean-vicissitudes]
[^mean-immortality]
[^mean-ingot]
[^mean-remonstrance]
[^mean-libeller]
[^mean-debauched]
[^mean-amorous]
[^mean-turpitude]
[^mean-debauched]
[^mean-licentious]
[^mean-frivolous]
[^mean-despots]
[^mean-repentance]
[^mean-ignominy]
[^mean-vain]
[^mean-presumptuousness]
[^mean-haughtiness]
당신의 grep
명령은 분명히정제일치하지만 삭제하지는 않습니다. 이렇게 하려면 sed
편집 스크립트를 사용하십시오.
$ sed 's/\[\^mean-[[:alnum:]-]*\]//g' file
and the most amorous
drunken, licentious,
haughtiness,
빈 줄을 추가하고 초기 공백을 제거합니다.
$ sed 's/\[\^mean-[[:alnum:]-]*\]//g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//' file
and the most amorous
drunken, licentious,
haughtiness,
또는 [^mean-...]
,
sed '/\[\^mean-[[:alnum:]-]*\]/{ s///g; /^[[:blank:]]*$/d; s/^[[:blank:]]*//; }' file