Sed脚本分支问题

时间:2017-08-15 21:05:23

标签: bash unix sed

我正在努力弄清楚如何编写sed脚本;特别是标签和分支。

例如,我想删除文本文件中的所有换行符(\n)。如果我在命令行上这样做

sed -e ':a;N;$!ba;/s/\n/ /g' testfile.txt

完全符合我的期望;删除所有换行符。

如果我将命令放入脚本文件(scrub.sed)中,问题就出现了:

:a
N
$!b a
s|\n| |g

并使用

执行它
sed -f scrub.sed testfile.txt

我收到以下错误:

sed: 3: scrub.sed: whitespace after branch
sed: 5: scrub.sed: undefined label 'a '

我正在尝试遵循here

所述的语法
:top
command1
command2
/pattern/b top
command3

我在FreeBSD中使用nano编辑文件,我在分支后找不到任何“空格”。我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是nano,我用来创建文件的编辑器。

当我在vi中重新创建文件时,问题就消失了;脚本运行没有问题。

nano中,我启用了空格的显示( Meta P )并获得以下内容:

:a
N.
$!ba.
s|\n|.|g

(期间是空白的地方)

一旦我删除了空格,就可以了。我试图创建另一个文件,小心不要在行之间添加任何空格,但出于某种原因,nano添加了它们。我不知道为什么nano表现出这种行为,但至少有一个向前迈进的答案。