Macos 如何在没有备份文件的情况下覆盖sed中的内容
我有这样一个命令:Macos 如何在没有备份文件的情况下覆盖sed中的内容,macos,sed,Macos,Sed,我有这样一个命令: sed -i -e '/console.log/ s/^\/*/\/\//' *.js for i in $(find . -type f -name "*.js"); do sed -i '/console.log/ s/^\/*/\/\//' $i; done; 它会注释掉所有console.log语句。但有两件事 它像test.js-e一样保留备份文件,我不想这样做 说我想把同一个进程递归到文件夹,怎么办 在检查sed的帮助时,-i使用后缀并将其用作备份 -i[后缀
sed -i -e '/console.log/ s/^\/*/\/\//' *.js
for i in $(find . -type f -name "*.js"); do sed -i '/console.log/ s/^\/*/\/\//' $i; done;
它会注释掉所有console.log
语句。但有两件事
test.js-e
一样保留备份文件,我不想这样做李>
在检查sed的帮助时,
-i
使用后缀并将其用作备份
-i[后缀],--就地[=后缀]就地编辑文件(如果提供后缀,则进行备份) 并且输出备份似乎是samefile+
-e
,这是您发送的第二个参数,请尝试删除空格,看看是否有效
sed -ie '/console.log/ s/^\/*/\/\//' *.js
对于递归,您可以将find
与-exec
或xargs
一起使用,请在运行exec
之前修改find命令并对其进行测试
find -name 'console.log' -type f -exec sed -ie '/console.log/ s/^\/*/\/\//' *.js \;
在这种情况下,您不必使用
-e
选项,因为它是不必要的。这将解决您的1st
问题(因为-e
似乎是-i
选项的后缀)
对于2nd
部分,您可以尝试以下方法:
sed -i -e '/console.log/ s/^\/*/\/\//' *.js
for i in $(find . -type f -name "*.js"); do sed -i '/console.log/ s/^\/*/\/\//' $i; done;
使用“查找”递归查找所有
.js
文件并进行替换。从您的原始帖子中,我猜您只想做一个C风格的注释,如:
/*
使用双反斜杠样式,如:
//
对吧??
然后你可以用这个命令来做
find . -name "*.js" -type f -exec sed -i '/console.log/ s#^/\*#//#g' '{}' \;
要意识到:
- 在sed中,拆分字符通常是
,但是如果您发现替换或匹配的字符串包含/
时很难转义。您可以根据需要将拆分字符更改为/
或#
,我发现它非常有用|
- 如果你确实想这样做,请确保你应该转义字符
,因为regex的组合*
只意味着匹配一个模式,即/*
出现一次或多次,或者一个都没有,这将匹配所有内容,这非常危险/
^\/*
?这难道不符合每一行开头(^
)吗?@armnotstrong:顺便说一句,我没有看他的表情。。。s/^/\/\/'就足够了(注释掉匹配行)。他使用的是s/^\/*/\/\/'(请参阅开头的*there..=>zero或more/,它在开头的时候总是计算为0/),我想这不是OP最初想要做的。但他接受了你的回答,无论如何,希望他知道自己在做什么:-)