我喜欢grey 下面的确切字词,并从当前目录中递归替换它们。
条件
plan => service_plan
Plan => ServicePlan
如果他们住在句子的中间,也必须更换。
abc_plan => abc_service_plan
AbcPlan => AbcServicePlan
除了这两个词。
Stripe::Plan
x stripe_plan
x 我试过
grep -l 'plan' ./* | xargs sed -i.bak -e 's/plan/service_plan/g'
但我不确定如何排除并包含更多单词。
如果您为特定命令的某些选项添加解释,我们将非常感激!
答案 0 :(得分:1)
您的搜索模式需要使用负面的lookbehind正则表达式。不幸的是标准shell实用程序。 sed
,awk
不支持lookbehind正则表达式。我建议将perl
与find
一起使用(用于递归搜索):
find . -type f -exec \
perl -i -pe 's/(?<!stripe_)plan/service_$&/g; s/(?<!Stripe::)Plan/Service$&/g' {} +