sed Replace - 替换一堆文件中的文本

sed Replace - 替换一堆文件中的文本

如何解析一堆文件并替换每次出现的 __esct 函数?

__esct('Full name')   

转换成:

$this->escape($this->translate('Full name'))  

如何在替换文本后添加第二个大括号?

答案1

尝试使用这个:

sed 's@__esct(\(.*)\)@$this->escape($this->translate(\1)@'  file.txt

答案2

sed -e 's/__esct(\(.*\))/$this->escape($this->translate(\1))/'

应该能让你走得很远。如果你有的话它会失败foo(__esct('Some text'))

sed -e 's/__esct(\([^(]*\))/$this->escape($this->translate(\1))/'

这个对那些人有用,但对那些人却失败了__esct(foo('Some text'))

答案3

Perl 有很好的扩展来完成类似的事情:

perl -pi -e 's;__esct\(\'([a-zA-Z ]*)\'\);\$this->escape\(\$this->translate\(\'\1\'));g'  list of the files to mangle

它将把原始文件保留为<文件>.bak。这只是每行的全局替换,就像您在 vi(1) 中编写的那样。在 Perl 中,() 等都是元字符,要匹配它们,您需要 \( \)。

[我不能 100% 确定 ' 的处理,需要检查您的特定 shell 在这种情况下会做什么。]

相关内容