# 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
请让我重新考虑我的想法..
...后来
我发现脚本中的逻辑错误打破了它。
答案 0 :(得分:3)
如果没有看到你的脚本,问题就不明显了。这里有一个快速测试,它在一个简单的脚本中运行得很好:
#!/bin/bash
cat /etc/crontab | sed '$!N;s/\n/ /'
如果您尝试将命令嵌入字符串或变量中,\ n将成为逃避候选者。
对于它的价值,除了你真的需要高级容器(这是罕见的)之外,很少有'强大'的例子来制作特定于bash的脚本而不是直接/ bin / sh posix兼容的shell脚本。你最终会得到一个脚本,它比其他许多posix / korn / bourne兼容的shell(包括bash)更加便携。
干杯! 肖恩
答案 1 :(得分: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
$