首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个sed命令在bash脚本内什么也不做,而在外部工作?

为什么这个sed命令在bash脚本内什么也不做,而在外部工作?
EN

Stack Overflow用户
提问于 2009-05-20 01:38:31
回答 2查看 5.2K关注 0票数 0
代码语言:javascript
复制
 # join pairs of lines side-by-side (like "paste")
 sed '$!N;s/\n/ /'

上面的脚本来自sourceforge上提供的大量sed一行程序。

我希望在一个bash脚本中使用它,但是如果在脚本中使用它就没有任何效果。如果我通过管道将脚本的输出传递给它,它将按照所述并排连接成对的行。

有些字符必须转义,但我就是看不到需要转义哪个字符才能在bash脚本中工作。

Yoroshiku Onegaishimasu!

稍后..。

代码语言:javascript
复制
#!/bin/bash
# numbers.sh

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

使用此脚本时:

代码语言:javascript
复制
#!/bin/bash

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

工作正常..

代码语言:javascript
复制
1 2
3 4
5 6
7 8
9 0

请让我重新整理一下我对此的看法..

稍后..。

我在脚本中找到了破坏它的逻辑错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-20 01:50:08

如果不看你的脚本,我就不知道问题出在哪里。在这里进行一次快速测试,它在一个简单的脚本中运行良好:

代码语言:javascript
复制
#!/bin/bash
cat /etc/crontab | sed '$!N;s/\n/ /'

如果您试图将命令嵌入到字符串或变量中,\n将是一个转义候选。

值得注意的是,除非您真的需要高级容器(这种情况很少见),否则很少有“强有力的”理由直接使用符合/bin/sh posix的shell脚本来创建特定于bash的脚本。最终得到的脚本对于其他几十种与posix/korn/bourne兼容的shell(包括bash)来说,可移植性要强得多。

干杯!肖恩

票数 3
EN

Stack Overflow用户

发布于 2009-05-20 01:53:28

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

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

对我很有效-在Cygwin下。'al‘是一个每行列出一个参数的程序。

代码语言:javascript
复制
$ 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
$
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/885798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档