在我的代码库中修复大量拼写错误时,我使用了以下命令:

find . -path '*/.svn' -prune -o -name  "*min.js" -prune -o -name "*min.css" -prune -o -name "flashLocaleXml.xml" -prune -o -type f -print0 | xargs -0 egrep -n "priority=" -exec sed -i 's/replace/newval/' {} \;

修复仓库中所有文件中的特定拼写错误。

但是,我对sed捕获不是很好,我想做类似的事情:
X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);变成:EventUtil.addEventListener(X, LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);

我已经广泛阅读,但是希望有人解释sed捕获如何与此特定的示例一起工作。

我给了它一些镜头,但是我什么都没想到:这是我的尝试
echo "X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);" | sed 's/\(.*\)EventUtil\(.*EventUtil\)/\1X\2/'

echo "X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);" | sed -r 's/(....),(....),(*\.addEventListener)(LevelUpEvent.*)/\1,\2\n\1,\2,/g'

echo "X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);" | sed 's/\([\.$]*\) \([\.$]*\)/\2 \1/'

先感谢您!

最佳答案

尝试:

sed 's/\([^.]*\)\([^(]*(\)/EventUtil\2\1, /'

输出:
EventUtil.addEventListener(X, LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);

说明:
\([^.]*\)                  # Content until first '.'
\([^(]*(\)                 # Content until first '('
EventUtil\2\1,             # Literal 'EventUtil' plus grouped content in previous expression.

09-25 17:25