【发布时间】:2015-01-12 09:47:57
【问题描述】:
我正在尝试使用 sed 添加文件,但我不断收到此错误消息
sed: 1: "test.txt": undefined label 'est.txt'
这是我正在使用的命令
Desktop > sed -i 's/White/Black/' test.txt
我不确定我在这里做错了什么......任何帮助将不胜感激!提前致谢!
【问题讨论】:
我正在尝试使用 sed 添加文件,但我不断收到此错误消息
sed: 1: "test.txt": undefined label 'est.txt'
这是我正在使用的命令
Desktop > sed -i 's/White/Black/' test.txt
我不确定我在这里做错了什么......任何帮助将不胜感激!提前致谢!
【问题讨论】:
sed 的某些版本需要 -i 的参数。试试:
sed -i.bak 's/White/Black/' test.txt
或者(仅限 OSX/BSD),
sed -i '' 's/White/Black/' test.txt
如您所知,-i 告诉sed 进行就地编辑。用于备份原始文件的扩展名的参数。参数为空字符串,您的sed 可能不会保留备份文件。
GNU sed 不需要 -i 的参数。 BSD sed (Mac OSX) 可以。
考虑命令:
sed -i 's/White/Black/' test.txt
如果您的sed 需要-i 的参数,那么它会认为s/White/Black/ 就是那个参数。因此,它认为下一个参数test.txt 是它应该执行的sed 命令。这将被解释为“测试”命令t,如果测试为真,则跳转到标签est.txt。没有定义这样的标签。因此错误消息:
sed: 1: "test.txt": undefined label 'est.txt'
ThatOtherGuy 报告以下内容将在所有平台上正常运行:
sed -i -e 's/White/Black/' test.txt
ThatOtherGuy 指出,这一行的行为是依赖于平台的。使用 BSD sed,它会创建一个带有 -e 扩展名的备份文件。使用 GNU sed,不会创建备份。
【讨论】:
sed -i -e '...' 可以在 GNU 和 OSX 上使用。
-e 进行备份扩展吗?很好。我更新了答案以包含您的代码。
-e 作为备份后缀,而在 GNU 上它看到 -e 作为引入 sed 命令,无论哪种方式它都是有效的并修改文件。