小编Dan*_*len的帖子

在 sed 中使用正则表达式(regex)

这是我未能掌握的一般主题的具体示例。

多年来,我一直使用 regex 和 sed 递归地查找/替换目录中所有文件中出现的所有字符串,使用如下所示:

#FIND $GLOBALS['timechecks'] and REPLACE with completely_different_string
shopt -s globstar dotglob;
for file in /var/www/**/*; do
  if [[ -f $file ]] && [[ -w $file ]]; then
    sed -i -- 's/\$GLOBALS\['\''timechecks'\''\]/completely_different_string/g' "$file"
  fi
done
Run Code Online (Sandbox Code Playgroud)

问题是,在我不知道的情况下,在 bash 中使用 Regex 有一些基本的东西。结果,我无法找出特定示例的解决方案。

目标字符串我被卡住的地方

$GLOBALS['timechecks']=addTimeCheck_sparky($GLOBALS['timechecks'], number_format(microtime(true),6,'.',''), __LINE__, basename(__FILE__));
Run Code Online (Sandbox Code Playgroud)

正则表达式我想出了不工作

这只是我的脚本中的 sed 行以及我想出的搜索正则表达式,但无济于事。

\$GLOBALS\['\''timechecks'\''\]=addTimeCheck_sparky[(]$GLOBALS\['\''timechecks'\''\][,][ ]number_format[(]microtime[(]true[)][,]6[,]'\''\.'\''[,]'\'''\''[)][,][ ]__LINE__[],[ ]basename[(]__FILE__[)][)][;]
Run Code Online (Sandbox Code Playgroud)

正则表达式调试器

我在这个例子中使用了一个正则表达式调试器,它显示了正则表达式找到我的目标字符串,但它对我不起作用。调试器位于此链接。这是它显示的查找我的目标字符串的正则表达式:

\$GLOBALS\['timechecks\'\]=addTimeCheck_sparky\(\$GLOBALS\[\'timechecks\'\], number_format\(microtime\(true\),6,\'\.\',''\), __LINE__, basename\(__FILE__\)\)
Run Code Online (Sandbox Code Playgroud)

正则表达式调试器的输出问题:

首先,我在 de 中尝试了我的正则表达式

  1. 我不知道为什么调试器的正则表达式在那里运行时有效,但在我的 bash 脚本中无效。
  2. 与我在 bash 中使用 sed 所学的正则表达式相比,正则表达式看起来“错误”
  3. 当我将调试器的正则表达式插入用于执行此任务的脚本时,它不起作用。
  4. 由于我不明白,我无法修复它

我认为我对将有效的正则表达式从调试器转换为在 …

bash sed find regular-expression replace

3
推荐指数
2
解决办法
4172
查看次数

标签 统计

bash ×1

find ×1

regular-expression ×1

replace ×1

sed ×1