Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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_Bash_Sed_Osx Mavericks - Fatal编程技术网

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不接受零长度扩展值。在linux
sed-i的/noreply@\(.*).example.com上/noreply@example.com/“
的工作原理类似于charm@LA_是的,关键是你没有给
-i
标记no值;你给它的值是
-e
(因为在Mac电脑上提供一个值似乎是强制性的)。苹果在这个特殊的caee中没有做错任何事情,他们只是提供BSD
sed
,它总是这样工作。各种Loinux
sed
版本是不同的传统,POSIX根本没有标准化这个选项;所以这两种行为都是不标准的。我得到的结果和你描述的完全一样。我在Windows上的解决方法是使用ping等待1秒,然后删除备份文件。