2017-02-16 17 views
0

gre30 の単語を以下に正確に置き換えて、現在のディレクトリから再帰的に置き換えてください。特定の単語を1行に置き換えてください

条件

  • plan => service_plan
  • Plan => ServicePlan

また、彼らは、文の途中に住んでいる場合、それはまた、交換する必要があります。これら二つの言葉を除き

  • abc_plan => abc_service_plan
  • AbcPlan => AbcServicePlan

  • Stripe::Plan X
  • X

私は

grep -l 'plan' ./* | xargs sed -i.bak -e 's/plan/service_plan/g'

を試してみました。しかし、私はいくつかのより多くの単語を除外して含めることができるかどうかはわかりません。

特定のコマンドのいくつかのオプションの説明を追加すると本当に感謝しています!

+0

あなたがこれまでに行うにしようとしましたか?あなたが試して失敗した方向は?あなたのコードを書いてください –

+0

*いくつかの単語*はいくつかの正確な単語を意味します。あなたはそれらを見せることができますか? – RomanPerekhrest

+0

はいいくつかの正確なワークス – Tosh

答えて

1

検索パターンには、負のlookbehind regexを使用する必要があります。残念なことに標準的なシェルユーティリティ。 sedawk lookbehind regexをサポートしていません。私は(再帰検索用)findperlを使用することをお勧め:

find . -type f -exec \ 
perl -i -pe 's/(?<!stripe_)plan/service_$&/g; s/(?<!Stripe::)Plan/Service$&/g' {} + 

Details on lookahead and lookbehind in regex

+0

ありがとう!ところで、lookbehind正規表現は何ですか? – Tosh

+0

'(?<!stripe_)'部分は、 'plan'の前に' stripe_'テキストを置くことはできません。 – anubhava

関連する問題