特定の文字を無視する正規表現

特定の文字を無視する正規表現

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]

内容によって異なりますが、模様英数字のみが可能です。もし模様たとえば、これらのうちの1つでも、角かっこが対応する角かっこ式[]内に正しく配置されていることを確認するには、追加のテストが必要です。

とにかく、関連する例に基づいて、次のようになります。

[{}\"]*[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

ファイルの各行には1つの正規表現が必要です。

関連情報