Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在没有备份文件的情况下覆盖sed中的内容_Macos_Sed - Fatal编程技术网

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的组合
      /*
      只意味着匹配一个模式,即
      /
      出现一次或多次,或者一个都没有,这将匹配所有内容,这非常危险


    与正则表达式配合使用的How comes的可能副本
    ^\/*
    ?这难道不符合每一行开头(
    ^
    )吗?@armnotstrong:顺便说一句,我没有看他的表情。。。s/^/\/\/'就足够了(注释掉匹配行)。他使用的是s/^\/*/\/\/'(请参阅开头的*there..=>zero或more/,它在开头的时候总是计算为0/),我想这不是OP最初想要做的。但他接受了你的回答,无论如何,希望他知道自己在做什么:-)