Regex 用正则表达式查找并替换字符串

Regex 用正则表达式查找并替换字符串,regex,linux,unix,sed,Regex,Linux,Unix,Sed,这可能是一个新的正则表达式问题(仍在学习),但我正在尝试取消代码中所有对象的资本化(但不是类);i、 对于代码段,请执行以下操作: Bishop_Piece Bishop; Bishop.move()... 我希望它是: Bishop_Piece bishop; bishop.move()... 我尝试的是: find . -type f | xargs sed -i 's/Bishop[;.]/bishop./g' 然而,这导致: Bishop_Piece bishop. bis

这可能是一个新的正则表达式问题(仍在学习),但我正在尝试取消代码中所有对象的资本化(但不是类);i、 对于代码段,请执行以下操作:

Bishop_Piece Bishop;

Bishop.move()...
我希望它是:

Bishop_Piece bishop;

bishop.move()...
我尝试的是:

find . -type f | xargs sed -i  's/Bishop[;.]/bishop./g'
然而,这导致:

Bishop_Piece bishop.

bishop.move()...
基本上,我希望在我正在搜索的内容(即Bishop)之后的字符被“保留”(无论是
还是
),这就是解释
Bishop./g

的原因

find . -type f | xargs sed -i 's/Bishop\([;.]\)/bishop\1/g'
请注意,
\([;.]\)
此处定义了一个捕获组,其值由替换模式中的
\1
引用

(…)
括号将被转义,因为这是符合POSIX BRE的正则表达式

见:

s='Bishop\u件Bishop;
毕肖普,移动()

sed的/Bishop\([;.]\)/Bishop\1/g使用sed时,您可以将
[;.]
与捕获组匹配,并在找到输出的同一位置返回匹配的内容。这很有效。我知道解决方案是
\1
部分。谢谢(以及更改查找的
\([;.]\)
Bishop_Piece bishop;
bishop.move()...