sed 错误“sed:-e 表达式 #1,字符 [#]:命令后的额外字符”

nel*_*aro 1 linux sed command-line

sed '/\r$/ {N s/\n//}'
sed: -e expression #1, char 10: 命令后的额外字符

我想了解我的命令行有什么问题。当我可以在脚本中但不能在命令行中执行以下某些操作时。

我一直在学习 www.grymoire.com 上的教程。当我被困在“使用多行”部分时 。这些脚本工作正常。

#!/bin/sh
sed'
# 在行尾寻找“#”
/#$/ {
# 找到一个 - 现在在下一行阅读
    N
# 删除“#”和换行符, 
    s/#\n//
}' 文件

就我而言,我正在寻找 \r 或返回 ^M。

#!/bin/sh
sed'
# 在行尾寻找“#”
/\r$/ {
# 找到一个 - 现在在下一行阅读
    N
# 删除“#”和换行符, 
    s/\r\n//
}' 文件

问题是当我尝试将其转换为单行 shell 命令时,它给了我一个错误。

sed '/\r$/ {N s/\n//}'
sed: -e expression #1, char 10: 命令后的额外字符
sed '/\r$/{N s/\n//}'
sed : -e 表达式 #1, char 9: 命令后的额外字符
sed '/\r$/{Ns/\n//}'
sed: -e 表达式 #1, char 8: 命令后的额外字符

我想了解我的命令行有什么问题。当我可以在脚本中但不能在命令行中执行以下操作时。

我创建了一个 sed 脚本来完成我想要的工作。

猫测试.sed 
#!/bin/sed -f
/\r$/ {
N 
s/\n//
}

jw0*_*013 5

您需要使用分号;来分隔sed同一行上的命令。具体来说,在N和之间s。有换行符时不需要分号,这就是您的脚本表单有效的原因。

改变

sed '/\r$/ {N s/\n//}'  
Run Code Online (Sandbox Code Playgroud)

sed '/\r$/ {N; s/\n//}'
             ^
Run Code Online (Sandbox Code Playgroud)