需要帮助使用 sed 编辑文件

Eld*_*kov 6 unix bash terminal sed

我正在尝试使用 sed 添加一个文件,但我不断收到此错误消息

sed: 1: "test.txt": undefined label 'est.txt'
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的命令

Desktop > sed -i 's/White/Black/' test.txt
Run Code Online (Sandbox Code Playgroud)

我不确定我在这里做错了什么......任何帮助将不胜感激!提前致谢!

Joh*_*024 9

的某些版本sed需要 的参数-i。尝试:

sed -i.bak  's/White/Black/' test.txt
Run Code Online (Sandbox Code Playgroud)

或者(仅限 OSX/BSD),

sed -i ''  's/White/Black/' test.txt
Run Code Online (Sandbox Code Playgroud)

如您所知,-i告诉sed就地编辑。用于备份原始文件的扩展名的参数。参数是空字符串,您sed可能不会保留备份文件。

GNUsed不需要为-i. BSD sed( Mac OSX ) 确实如此。

细节

考虑以下命令:

sed -i 's/White/Black/' test.txt
Run Code Online (Sandbox Code Playgroud)

如果您sed需要对 的参数-i,那么它会相信那s/White/Black/是那个参数。因此,它认为下一个参数test.txtsed它应该执行的命令。这将被解释为“测试”命令t,目的是est.txt在测试为真时跳转到标签。没有定义这样的标签。因此错误消息:

sed: 1: "test.txt": undefined label 'est.txt'
Run Code Online (Sandbox Code Playgroud)

选择

ThatOtherGuy 报告说,以下内容将在所有平台上运行而不会出错:

sed -i -e 's/White/Black/' test.txt
Run Code Online (Sandbox Code Playgroud)

ThatOtherGuy 指出,该行的行为取决于平台。使用 BSD sed,它会创建一个带有-e扩展名的备份文件。使用 GNU sed,不会创建备份。