正規表現パターンと代替行

正規表現パターンと代替行

移行プロセスでは、bashスクリプトでいくつかの代替操作を実行する必要があります。

したがって、私の.txtファイルには次の引用符があります。

[[File:My Image.png|400px|thumb|center|My Image]]
[[File:My Image.png|400px|thumb|center]]
[[File:My Image.png|400px|thumb]]
[[File:My Image.png|400px]]
[[File:My Image.png]]

私がしなければならないことは、これらのすべてのイベントを次の行に置き換えることです(したがって、もはやサイズ、説明、またはその他の情報はありません)。

[[File:My Image.png]]

それで、すべての画像名を抽出するためにPCRE正規表現を書いてみました。

/File:(.*\..{3})/g

.txtファイルで一致するすべてのエントリを見つけ、正規表現を使用して画像名を抽出するために、次の最終コマンドを作成しました。

find . -name "*.txt" | xargs perl -i -p -e 's/File:(.*\..{3})/$1/g'

しかし、いくつかの問題が発生しました。

  • 間違い:

xargs: 終わらない引用

  • 最後に、すべての項目(全行)を抽出された画像名に置き換える方法がわかりません。

PS:私はMacOSシステムでbash v4を使用しています。

ベストアンサー1

私は書いた新しい正規表現全体を一致させ[[...]]、維持したいだけに交換してくれます。ファイル名にパイプ|文字や終端が含まれていないとします]]。で問題を再現することはできませんが、とにかく以下はLinuxで動作するsオプションxargsに置き換えられました。find-exec

find . -name "*.txt" -exec perl -i -pe 's/(\[\[File:[^|]*).*?(\]\])/$1$2/g' '{}' +

おすすめ記事