Sed 错误“sed:-e 表达式 #1,char [#]:命令后有多余的字符”

Sed 错误“sed:-e 表达式 #1,char [#]:命令后有多余的字符”

sed ‘/\r$/ {N s/\n//}’
sed: -e 表达式 #1,字符 10:命令后的额外字符

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

我一直在学习 www.grymoire.com 上的教程。当我在以下部分卡住时 使用多条线路. 这些脚本运行良好。

/bin/sh #!/bin/sh 复制代码
sed'
# 查找行末的“#”
/#$/ {
# 找到一个 - 现在读下一行
# 删除“#”和换行符,
    s/#\n//
}' 文件

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

/bin/sh #!/bin/sh 复制代码
sed'
# 查找行末的“#”
/\r$/ {
# 找到一个 - 现在读下一行
# 删除“#”和换行符,
    s/\r\n//
}' 文件

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

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

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

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

cat 测试.sed
/bin/sed -f 复制代码
/\r$/ {
\n//
}

答案1

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

改变

sed '/\r$/ {N s/\n//}'  

sed '/\r$/ {N; s/\n//}'
             ^

相关内容