2009-05-20 54 views
0
# join pairs of lines side-by-side (like "paste") 
sed '$!N;s/\n/ /' 

上述脚本来自sourceforge上的sed one-liners列表。这个sed命令为什么在bash脚本里面什么都不做,但在外面工作?

我希望在bash脚本中使用它,但如果在脚本中使用它,则不起作用。如果我通过它输出脚本的输出,它会按照所述连接并行连接线对。

一些角色必须逃跑,但我不能“看到”哪个角色需要逃脱才能使其在bash脚本中工作。

Yoroshiku Onegaishimasu!

后来..

#!/bin/bash 
# numbers.sh 

for X in 1 2 3 4 5 6 7 8 9 0 
do 
     echo $X 
done 

当使用这个脚本:

#!/bin/bash 

./numbers.sh | sed '$!N;s/\n/ /' 

工作正常..

1 2 
3 4 
5 6 
7 8 
9 0 

请让我重新集结在此我的想法..

后来...

我在脚本中发现了一个逻辑错误,导致它崩溃。

回答

3

我不明白什么问题是没有看到你的脚本。这里的一个快速测试和它的工作一个简单的脚本就好内:

#!/bin/bash 
cat /etc/crontab | sed '$!N;s/\n/ /' 

如果你试图嵌入一个字符串或变量里面的命令时,\ n将被转义候选人。

对于什么是值得的,除非你真的需要高级容器(这是很少见的),否则很少有一个'strong'的情况是用直线上/ bin/sh posix兼容的shell脚本来制作bash特定的脚本。你最终将得到一个脚本,它可以携带数十个其他posix/korn/bourne兼容shell(包括bash)。

干杯! Sean

+0

感谢您的评论,我没有理由使用bash,我现在已经证实,正如您所说,它工作正常。它必须是脚本本身更具体的东西。 – 2009-05-20 02:50:44

+1

猫的无用用途。 `sed'$!N; s/\ n//' Jens 2012-05-08 12:04:30

1

您是否缺少"[email protected]"来指示文件名参数 - 因此它只能从标准输入中读取?

什么是不良行为?该文件是否简单地复制到标准输出?

适用于我 - 在Cygwin下。 'al'是一个程序,每行列出一个参数。

$ al a b c d e f | sed '$!N;s/\n/ /' 
a b 
c d 
e f 
$ cat xxx 
sed '$!N;s/\n/ /' 
$ al a b c d e f g | bash xxx 
a b 
c d 
e f 
g 
$