Regex 使用bash脚本搜索和替换包含点、单引号和双引号的字符串

Regex 使用bash脚本搜索和替换包含点、单引号和双引号的字符串,regex,bash,sed,Regex,Bash,Sed,我需要在文件夹的所有文件中搜索字符串cf['stack.over.flow'],并使用bash脚本将其替换为stack\u over\u flow。我用sed尝试了很多方法,但是没有成功地避开单引号和点。请帮忙 编辑: 如何处理带有双引号的字符串。 ex:cf[“stack.over.flow”]对于像cf[“stack.over.flow”]这样的双引号,您可以使用: sed "s/cf\['stack\.over\.flow']/STACK_OVER_FLOW/" you

我需要在文件夹的所有文件中搜索字符串
cf['stack.over.flow']
,并使用bash脚本将其替换为
stack\u over\u flow
。我用
sed
尝试了很多方法,但是没有成功地避开单引号和点。请帮忙

编辑: 如何处理带有双引号的字符串。
ex:
cf[“stack.over.flow”]

对于像
cf[“stack.over.flow”]
这样的双引号,您可以使用:

sed "s/cf\['stack\.over\.flow']/STACK_OVER_FLOW/" your_dir/*
sed 's/cf\["stack\.over\.flow"]/STACK_OVER_FLOW/' your_dir/*

对于双引号的情况,如
cf[“stack.over.flow”]
,您可以使用:

sed "s/cf\['stack\.over\.flow']/STACK_OVER_FLOW/" your_dir/*
sed 's/cf\["stack\.over\.flow"]/STACK_OVER_FLOW/' your_dir/*
链接命令并在执行命令之前添加一个
-i
在适当位置执行替换:

sed -i "s/cf\['stack\.over\.flow']/STACK_OVER_FLOW/" your_dir/* && 
sed -i 's/cf\["stack\.over\.flow"]/STACK_OVER_FLOW/' your_dir/*
编辑:@Jetchisel提供了一种使用单个sed命令进行编辑的方法:

sed -i "s/cf\[[\"']stack\.over\.flow[\"']\]/STACK_OVER_FLOW/" your_dir/*
其工作方式是匹配:

  • 开场白
    cf\[
  • 后跟(转义)双引号或单引号:
    [\”]
  • 后跟“stack.over.flow”字符串(转义
    ):
    stack\.over\.flow
  • 后跟(转义的)双引号或单引号:
    [\”]
  • 后跟结束转义方括号:
    \]
  • 然后将上述所有内容替换为“STACK_OVER_FLOW”

@mattb如何处理带有双引号的字符串。例如:cf[“stack.over.flow”]@AjayGanesan-对于双引号的情况,我不知道如何在单个命令中完成。我只想在命令中交换单引号和双引号(如果有意义的话)。非常感谢。两者都起作用了。顺便问一下,逻辑是什么。
sed“s/cf\[\'']stack\.over\.flow[\']\]/stack\.u over\.flow/.txt
Look mah,只有一个
sed
:-)@AjayGanesan-这个页面()比我以前解释得更好-还有一个很棒的sed教程(),我还在学习!