如何在macOS上使用sed用bash脚本替换一行

如何在macOS上使用sed用bash脚本替换一行,bash,macos,shell,sed,Bash,Macos,Shell,Sed,我在macOS High Sierra我和sed有一些问题, 在谷歌和这个网站上呆了一天之后,我真的尝试了我能想到的一切,并得到了建议 我有一个3行的example.txt文件。 第1行 第2行 第3行 这3行可以是任何东西,我不知道他们的前面。(场景) 在某个时刻,我确实知道这条线将是什么 我所希望实现的就是使用“无论什么”的在线服务,它基本上会说: 在该文件中,用新数据替换第2行 sed-i“2s/*/$NEW\u DATA/”“$FILENAME” 这应该是可行的,但在macOS上却不行

我在macOS High Sierra我和sed有一些问题, 在谷歌和这个网站上呆了一天之后,我真的尝试了我能想到的一切,并得到了建议

我有一个3行的example.txt文件。 第1行 第2行 第3行

这3行可以是任何东西,我不知道他们的前面。(场景) 在某个时刻,我确实知道这条线将是什么

我所希望实现的就是使用“无论什么”的在线服务,它基本上会说: 在该文件中,用新数据替换第2行

sed-i“2s/*/$NEW\u DATA/”“$FILENAME”

这应该是可行的,但在macOS上却不行

sed-ie“2s/*/$NEW\u DATA/”“$FILENAME”

注意e?这里有人建议加一个e,是的,这很有效。。但这意味着它在.txt后面添加了e。最后我得到了两个文件,example.txt和example.txte

sed-i''2s/*/$NEW\u DATA/'$FILENAME'

注意-i后面的“”,是的,没有空格?这也应该奏效。 它不会,它会抱怨命令c需要\

我可以继续,但要求很简单:

在macOS上,在bash shell脚本中,我如何简单地用一行全新的文本替换.txt文件中的一行指定文本——不知道之前的文本是什么

如果这可以是一个简单的macOS单行程序和awk或其他什么,那就好了。它不必被屏蔽。但当我搜索这个网站时,它似乎是这方面的推荐网站

从macOS中的页面:

-i extension
         Edit files in-place, saving backups with the specified extension. 
         If a zero-length extension is given, no backup will be saved. 
因此,这可用于在不保留备份的情况下更换2号线:

sed -i '' "2s/.*/$NEW_DATA/" testfile.txt
如果目标只是替换第2行的内容,也可以使用awk,例如:

awk 'NR==2{$0="your content"}1' testfile.txt > testfile.tmp && mv testfile.tmp testfile.txt

如果使用-i'-e,行为是否会改变?我一直认为-e是隐含的。只是-我不会在macOS上工作,我已经提到了这一点。我尝试了-I''和-I'',除非在macOS high sierra中修改了
sed
,否则这应该有效,在任何情况下,至少
awk
替代方案有效?你能把这张照片贴上去吗errors@user8964123这里的关键是
-I
'
之间必须有一个空格,否则它将无法工作。不幸的是,GNU sed不允许它有一个空间,所以没有办法通过可移植的方式实现这一点。