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

上面的脚本来自 sourceforge 上的 sed one-liners 列表。

我希望在 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

请让我重新整理一下我的想法。

之后...

我在脚本中发现了破坏它的逻辑错误。

4

2 回答 2

3

如果没有看到您的脚本,对我来说问题出在哪里并不明显。在这里进行快速测试,它在一个简单的脚本中运行良好:

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

如果您尝试将命令嵌入到字符串或变量中,则 \n 将成为转义候选者。

就其价值而言,除非您真的需要高级容器(这很少见),否则很少有“强有力”的案例可以直接使用 /bin/sh posix 兼容的 shell 脚本来制作特定于 bash 的脚本。您最终会得到一个脚本,该脚本可移植到许多其他与 posix/korn/bourne 兼容的 shell(包括 bash)。

干杯! 肖恩

于 2009-05-20T01:50:07.870 回答
1

您是否缺少"$@"指示文件名参数的 - 所以它只是从标准输入中读取?

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

为我工作 - 在 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
$
于 2009-05-20T01:53:27.673 回答