在我的代码库中修复大量拼写错误时,我使用了这个:
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/'
提前谢谢你!
答案 0 :(得分:3)
尝试:
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.
答案 1 :(得分:2)
这个sed命令可以。
sed 's/\(X\).\(addEventListener\)(\(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels\));/EventUtil.\2(\1, \3);/'
$ echo "X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);" | sed 's/\(X\).\(addEventListener\)(\(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels\));/EventUtil.\2(\1, \3);/'
EventUtil.addEventListener(X, LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);
答案 2 :(得分:2)
试试这个
echo "X.addEventListener(LevelUpEvent.GENERIC_LEVEL_UP, updateLevels);" | sed -e "s/\([A-Za-z]\{1,\}\)\.addEventListener(/EventUtil.addEventListener(\1, /"
此正则表达式将使用
识别变量名称\([A-Za-z]\{1,\}\)
然后.addEventListener(
\.addEventListener(
并将其替换为
EventUtil.addEventListener(\1
其中\ 1表示变量名称