Macos 没有备份文件的SED
我使用以下Macos 没有备份文件的SED,macos,bash,sed,osx-mavericks,Macos,Bash,Sed,Osx Mavericks,我使用以下sed命令替换文件中的文本: sed -i -e 's/noreply@\(.*\).example.com/noreply@example.com/' cron.yaml 但它会在名称cron.yaml-e下创建文件cron.yaml的备份 我试图将-I移到末尾: sed -e 's/noreply@\(.*\).example.com/noreply@example.com/' -i cron.yaml 但是在本例中,sed返回一个错误 我应该如何修改命令行以避免创建备份文件?
sed
命令替换文件中的文本:
sed -i -e 's/noreply@\(.*\).example.com/noreply@example.com/' cron.yaml
但它会在名称cron.yaml-e
下创建文件cron.yaml
的备份
我试图将-I
移到末尾:
sed -e 's/noreply@\(.*\).example.com/noreply@example.com/' -i cron.yaml
但是在本例中,sed
返回一个错误
我应该如何修改命令行以避免创建备份文件?根据,您应该在macOS上指定零长度扩展名
sed -i '' -e 's/noreply@\(.*\).example.com/noreply@example.com/'
在Windows上,当放置以下任一项时,GNUWIN32 sed将失败:
sed-i“s/whatfound/whatput/g”。\MyDir\*”
sed-i.BackUp“s/whatfound/whatput/g”。\MyDir\*”
所有备份都是在实际文件夹上创建的,文件名模式为sed$$$$$$$
,其中六个$表示随机删除者和数字
我认为它没有办法不创建任何备份,也没有办法不创建可以知道哪个文件是源文件的备份,也没有办法不在与源文件相同的文件夹中创建备份
它还尝试读取子文件夹
,就像它们在文件
中一样,courrse为这些子文件夹
显示了一条无法读取的消息;当然,它不会递归子文件夹,它只适用于同一文件夹中的所有文件夹,但不适用于子文件夹中的内容(不是递归的)
简而言之:-i
根本无法正常工作
我使用的GNUWIN32 sed版本是4.2.1,它是从以下网站下载的:
在谷歌上我发现了一个关于这个BUG的网站,并改为下载一个sed
工具,而不是sed
工具,我有点担心自己不是官方的
;链接到我在谷歌上找到的关于-i
错误的sed
:你不需要把-e
放进去!便携性就这么多!为什么苹果会强制这么做?只是为了打破别人的脚本?@chiastic security更深入地讨论了这些差异以及它们存在的原因。@LA_uLinux中使用的GNU版sed不接受零长度扩展值。在linuxsed-i的/noreply@\(.*).example.com上/noreply@example.com/“
的工作原理类似于charm@LA_是的,关键是你没有给-i
标记no值;你给它的值是-e
(因为在Mac电脑上提供一个值似乎是强制性的)。苹果在这个特殊的caee中没有做错任何事情,他们只是提供BSDsed
,它总是这样工作。各种Loinuxsed
版本是不同的传统,POSIX根本没有标准化这个选项;所以这两种行为都是不标准的。我得到的结果和你描述的完全一样。我在Windows上的解决方法是使用ping等待1秒,然后删除备份文件。