Mac:使用正则表达式替换目录中文件内的文本

时间:2015-07-17 08:44:01

标签: regex linux terminal

我需要替换目录中的所有匹配(正则表达式)来自" * ::"成为" \ * ::" 示例:(在多个php文件中)

ID::
user::
process::

....

是:

\ID::
\user::
\process::

我目前使用的是单个命令

find . -type f -name '*.php' -exec sed -i '' s/ID::/\\\\ID::/ {} +
find . -type f -name '*.php' -exec sed -i '' s/user::/\\\\user::/ {} +
find . -type f -name '*.php' -exec sed -i '' s/process::/\\\\process::/ {} +

如何编写正则表达式来替换任何" * ::" => " \ * ::"

感谢,

2 个答案:

答案 0 :(得分:1)

您希望使用“分组”或“反向引用”来引用正则表达式的一部分。这是通过使用\(\)包围目标群组来完成的,然后使用\1\2等回复它们。在您的情况下,以下表达式应该有效:

$ echo -e "ID::\nuser::\nprocess::" | sed 's/\(.*\)::/\\\1::/g'

使用以下输出:

\ID::
\user::
\process::

答案 1 :(得分:1)

我更新" bebop"满足我要求的解决方案,非常感谢他

溶液:

sed -i -e 's/\([A-Za-z]*\)::/\\\1::/g' `grep -ril '::' *.php`