MacOS下如何用sed在指定字符串的下一行添加新字符串?
解决MacOS原生sed插入行时的"command a expects \ followed by text"错误
我之前也踩过这个一模一样的坑!你想要在文件里'django.contrib.staticfiles',的下一行插入'rest_framework',,执行了这条命令:
sed '/'django.contrib.staticfiles',/a 'rest_framework',' file
结果直接收到错误提示:
sed: 1: "/'django.contrib.static ...": command a expects \ followed by text
哪怕给符号加了转义符\也没解决问题,对吧?
这其实是MacOS自带的BSD sed和GNU sed的语法差异导致的——BSD版本的sed在使用a命令插入行时,对格式的要求比GNU sed严格得多,比如换行、引号转义的处理逻辑不一样,手动调整很容易出错。
最省心的解决办法就是安装GNU版的sed(也就是gsed):
brew install gnu-sed
安装完成后,用gsed替换原来的sed执行命令,就能顺利完成插入操作了:
gsed '/'django.contrib.staticfiles',/a 'rest_framework',' file
内容的提问来源于stack exchange,提问作者Vcoss




