我有这样的命令:
sed -i -e '/console.log/ s/^\/*/\/\//' *.js
会对所有console.log
语句进行注释。但有两件事
test.js-e
,我不想这样做。 答案 0 :(得分:2)
在这种特殊情况下,您不必使用-e
选项,因为它是不必要的。这将解决您的1st
问题(因为-e
似乎将作为-i
选项的后缀)。
对于2nd
部分,你可以尝试这样的事情:
for i in $(find . -type f -name "*.js"); do sed -i '/console.log/ s/^\/*/\/\//' $i; done;
使用find以递归方式查找所有.js
个文件并进行替换。
答案 1 :(得分:0)
检查sed的帮助时,-i
会使用后缀并将其用作备份,
-i [SUFFIX], - in-place [= SUFFIX]
编辑文件(如果提供SUFFIX,则进行备份)
并且输出备份似乎是samefile + -e
这是你要发送的第二个参数,尝试删除空格并查看是否可行
sed -ie '/console.log/ s/^\/*/\/\//' *.js
至于递归,您可以将find
与-exec
或xargs
一起使用,请修改find命令并在运行exec
之前对其进行测试
find -name 'console.log' -type f -exec sed -ie '/console.log/ s/^\/*/\/\//' *.js \;
答案 2 :(得分:0)
从你原来的帖子中我假设你只想做一个C风格的评论,如:
/*
采用双反斜杠式:
//
正确? 然后你可以用这个命令
来做find . -name "*.js" -type f -exec sed -i '/console.log/ s#^/\*#//#g' '{}' \;
要注意:
在sed中,分割字符通常为/
,但如果您在替换或匹配字符串包含/
时发现对Escape感到烦恼。您可以根据需要将拆分字符更改为#
或|
,我发现它非常有用。
如果你想做的就是我的假设,请确保你应该逃脱角色*
,因为正则表达式/*
的组合只是意味着匹配/
的模式1}}出现一次或多次或一无所有,这将匹配所有内容,它非常危险!