繁体   English   中英

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

[英]How to use sed on macOS to replace a line with bash script

我在使用macOS High Sierra时,在sed上遇到了一些问题,在Google和该网站上呆了一天后,我已经尽力尝试了我能想到的一切,并提出了建议。

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

3行可以是任何内容,我不预先知道它们。 (场景)在某些时候,我确实知道这条线是什么。

我想要实现的只是使用基本上说的“无论如何”的onliner:在该文件中,用新数据替换第2行。

sed -i "2s/.*/$NEW_DATA/" "$FILENAME"

这应该可以,但是在macOS上则不能。

sed -ie "2s/.*/$NEW_DATA/" "$FILENAME"

注意e? 这里有人建议添加一个e,是的,这是可行的..但这意味着它将.txt后面添加了e。 我最终得到2个文件,例如example.txt和example.txte

sed -i'' "2s/.*/$NEW_DATA/" "$FILENAME"

注意-i后面的”,是的,没有空格吗? 这也应该起作用。 并非如此,它会抱怨命令c需要\\

我可以继续,但是请求非常简单:

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

如果这可以是带有awk或其他功能的简单macOS衬垫,那就很好。 它不必被sed。 但是,当我搜索此站点时,这似乎是推荐使用的站点。

在macOS的sed手册页中:

-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

在MacOS上带sed-i参数需要备份文件的文件扩展名,例如:

/usr/bin/sed  -i .bkp  "2s/.*/$NEW_DATA/" "$FILENAME"

如果您不想要备份文件,请使用:

/usr/bin/sed  -i"" "2s/.*/$NEW_DATA/" "$FILENAME"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM