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//}'
^