在我的代码库中修复大量拼写错误时,我使用了以下命令:
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.