我有一个object.attribute
代码,其中attribute可以是数组
例如:object.SIZE_OF_IMAGE[0]
或一个简单的字符串。我想搜索所有出现的"object.attribute"
并将其替换为self.lowercase(attribute)
,我想要在vim上使用正则表达式来做到这一点。
我可以使用该:%s/object.*/self./gc
并手动替换它,但是速度很慢。
以下是一些示例:
object.SIZE
至self.size
object.SIZE_OF_IMAGE[0]
至self.size_of_image[0]
答案 0 :(得分:2)
您基本上只需要两件事:
:help /\(
使您可以存储\(...\)
之间匹配的内容,然后(通过\1
,\2
等)在替换中(甚至之后)进行引用。模式本身)。:help s/\L
特殊替换操作,使所有内容都变为小写。这将为您提供以下命令:
:%substitute/\<object\.\(\w\+\)/self.\L\1/g
注意:
\<
),以避免也与schlobject
匹配。\w\+
匹配字母,数字和下划线(因此可以满足您的示例);这里有多种选择。答案 1 :(得分:0)
sed -E 's/object\.([^ \(]*)(.*)/self.lowercase(\1)\2/g' file_name.txt
以上命令认为您的属性后跟空格或“(”
您可以根据自己的需要调整该命令
答案 2 :(得分:-1)
在命令模式下尝试此
:1,$ s/object.attribute/self.lowercase(attribute)/g
答案 3 :(得分:-1)
根据您上面的评论,该属性部分 ”按空格或[或(“ 完成,您可以将其与以下项匹配:
/object\.[^ [(]*
因此,要将其替换为self.attribute
,请使用捕获
组和\L
使所有内容变为小写:
:%s/\vobject\.([^ [(]*)/self.\L\1/g