특정 문자를 무시하는 정규식

특정 문자를 무시하는 정규식

bib2bib 도구에 사용되는 특정 문자를 무시하는 정규식을 찾아야 합니다. 예를 들어, "muller"라는 단어가 나오는 것을 찾아야 합니다. "안녕하세요, 제 이름은 Michael M\"uller입니다. 잘 지내세요?" 또는 "There is M\"{u}ller"와 같은 문자열도 있습니다.

그것은 발견되어야 한다.

편집: "뮬러"뿐만 아니라 모든 단어에 대해 작동하려면 필요합니다.

답변1

\"\"{및 같은 항목을 제거하려면 비슷한 도구를 사용하여 입력 파일을 입력하기 전에 }사전 처리해야 합니다 .sedbib2bib

예:

 sed -e 's/\\"\{\|\\"\|\}//' input.bib > input.bib.preprocessed

\"{u}또는 구체적으로 다음 과 같이 변환하십시오 u.

 sed -e 's/\\"{\(.\)}/\1/' -e 's/\\"//' input.bib > input.bib.preprocessed

답변2

완전히 이식 가능한 솔루션은 다음과 같습니다.

n='
';printf %s\\n muller wright dummy >/tmp/patterns
tr '[:lower:][:upper:]' '[:upper:][:lower:]' </tmp/patterns |
paste '-d\n\n' - /tmp/patterns |
sed "N;s/./\\$n&/;:ul$n s/\(\n\)\(.\)\(.*\n\)\(.\)/\2\4\1\3/;tul"'
       s/\n//g;s/../[{}\\"]*[&]/g'

최종 출력은 sed다음과 같습니다.

[{}\"]*[mM][{}\"]*[uU][{}\"]*[lL][{}\"]*[lL][{}\"]*[eE][{}\"]*[rR]
[{}\"]*[wW][{}\"]*[rR][{}\"]*[iI][{}\"]*[gG][{}\"]*[hH][{}\"]*[tT]
[{}\"]*[Dd][{}\"]*[uU][{}\"]*[Mm][{}\"]*[mM][{}\"]*[Yy]

내용에 따라 다르겠지만무늬영숫자 문자만 가능합니다. 만약에무늬예를 들어, 이들 중 하나 []라도 대괄호가 해당 대괄호 표현식 내에 올바르게 배치되었는지 확인하려면 추가 테스트가 필요합니다.

어쨌든 관련 예제를 기반으로 하면 다음과 같습니다.

[{}\"]*[mM][{}\"]*[uU][{}\"]*[lL][{}\"]*[lL][{}\"]*[eE][{}\"]*[rR]

...다음 중 하나가 포함된 줄과 일치하는 정규식입니다.muller또는Muller또는M"ulL\\\{"er.

GNU를 사용하면 sed대소문자 변환을 내부적으로 처리하므로 sed다음과 같습니다.

sed -E 's/([[:upper:]]?)([[:lower:]]?)/\1\L\1\2\U\2/g' patterns

...인쇄...

mMuUlLlLeErR
wWrRiIgGhHtT
DduUMmmMYy

...완전히 구체화되었으며 이전 조합과 tr|paste|sed동일한 동작을 얻습니다.(게다가, 이는 앞에서 언급한 대괄호 문제를 올바르게 처리합니다)그냥 GNU를 사용하세요 sed:

sed -E '
    s/([[:lower:]]?)([[:upper:]]?)/\1\U\1\2\L\2/g
    s/[[:alpha:]]{2}|./[{}\\"]*[&]/g
' </tmp/patterns

답변3

데이터를 어떻게 얻었는지는 언급하지 않았습니다. 게시된 패턴이 포함된 행을 삭제하려면 다음을 사용할 수 있습니다 grep.

grep -v -E '(muller|M\\"uller|M\\"{u}ller)'

( \다른 이스케이프가 필요하다는 점에 유의하세요.) 역행을 주어진 패턴과 일치시키려면 를 생략하세요 -v.

파일에 정규식을 정의하려면 다음과 같이 grep's 옵션을 사용하십시오.-f

grep -v -E -f file-with-regexps

파일의 각 줄에 하나의 정규식이 필요합니다.

관련 정보