我在macOS High Sierra上,我在sed上遇到了一些问题,在谷歌和这个网站上度过了一天之后,我老老实实地尝试了我能想到的一切,并提出了建议 .
我有一个包含3行的example.txt文件 . line1 line2 line3
3条线可以是任何东西,我不提前知道它们 . (场景)在某些时候,我确实知道这条线是什么 .
我希望实现的只是使用“无论什么”在线人,基本上说:在该文件中,用新数据替换第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"
注意''背后是',是的,没有空格?这也应该有用 . 它没有,它会抱怨命令c需要\
我可以继续,但请求很简单:
在macOS上,在bash shell脚本中,如何使用全新的文本行简单地替换.txt文件中的指定文本行 - 不知道之前的文本行是什么?
如果这可以是一个简单的macOS one liner with awk或者其他什么,那很好 . 它不必是sed . 但是,当我搜索这个网站时,似乎是推荐的一个在这个方面 .
2 回答
从macOS中的sed man页面:
因此,这可用于替换第2行而不保留备份:
如果目标只是替换第2行的内容,也可以使用
awk
,例如:MacOS上
-i
的-i
参数需要备份文件的文件扩展名,例如:如果您不想要备份文件,请使用: