关于sed中换行的对话

王朝other·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

陈绪 说:

有个麻烦问题和你讨论一下

用sed在文件第1行后加入2行的问题。加入1行好说,但是加入2行,就有点麻烦了

如果建立一个sed.sh

[root@www root]# more sed.sh

#!/bin/sed -f

1a111111222222

则可以运行成功

[root@www root]# ./sed.sh a

aaa

111111

222222

bbb

ccc

但是直接

[root@www root]# sed -e "1a 111111> 222222" a

aaa

111111222222

bbb

ccc

则111111和222222不是两行,而是连成了一行

有何办法在命令行也成功呢

泥偶 说:

ed -e "1a 111111\n222222" a

陈绪 说:

不灵呀

泥偶 说:

sed -e "1a 111111\n222222" a

陈绪 说:

你试试,我在多台机器上试了(都是redhat as3),不灵

泥偶 说:

我试过了

陈绪 说:

我开始也是这么干的,但是不灵

泥偶 说:

我们有 RHEL3

陈绪 说:

[root@www root]# sed -e "1a 111111\n222222" a

aaa

111111n222222

bbb

ccc

泥偶 说:

在 RHEL4 和 Debian etch 上面都好用

泥偶 说:

那换成单引号

陈绪 说:

不灵呀

泥偶 说:

$ sed --version

GNU sed version 4.1.5

Copyright 2003 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,

to the extent permitted by law.

泥偶 说:

我的是这个

陈绪 说:

[root@www root]# sed --version

GNU sed version 4.0.7

Copyright 2003 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,

to the extent permitted by law.

泥偶 说:

那就……撒手锏……

泥偶 说:

sed -e '1a 111111' -e '1a 222222' a

泥偶 说:

这样就行啦

陈绪 说:

这个肯定行,我也用过

陈绪 说:

但是如果有100行呢

泥偶 说:

写100个 -e

陈绪 说:

那不行

泥偶 说:

这种事情或者是只做一次,或者是经常要做

泥偶 说:

只做一次就 vi 就好了

泥偶 说:

经常要做就写脚本

泥偶 说:

不管是哪种情况写100 个 -e都没问题啊

陈绪 说:

放到大的脚本中,是shell脚本 这一句话就sed加两行完了

泥偶 说:

写了两个 -e 也没什么啊

陈绪 说:

晕菜,我就是想一次搞定呀

泥偶 说:

这样不也是一次搞掂么

泥偶 说:

效率也没损失

陈绪 说:

不专业呀,嗨

陈绪 说:

我这里都是as3,没有别的试

泥偶 说:

我这里没有 AS 3

陈绪 说:

今天在下5,呵呵

泥偶 说:

据说 RHEL5 里面很多包是从 Fedora Core 6 直接拿的

泥偶 说:

SRPM 在 RHEL5 上面都编不过去

陈绪 说:

可怜,不过大家都在下,就先下一个,呵呵

泥偶 说:

哈哈,我知道宝葫芦的秘密啦

陈绪 说:

宝葫芦?

泥偶 说:

sed '1a 111111222222' a

* 陈绪 说:

我就是要问这个

泥偶 说:

sed '1a 111111\n222222' a

泥偶 说:

在我这里这两种方法都行

* 陈绪 说:

明白了,哈哈

* 陈绪 说:

[root@www root]# sed '1a 111111222222' -i a

[root@www root]# more a

aaa

111111

222222

bbb

ccc

泥偶 说:

对啊

* 陈绪 说:

我上次也这么试过,不过用",就是不灵呀

泥偶 说:

双引号的含义和单引号不同的

* 陈绪 说:

那个含义我知道,没想到换行也有区别

泥偶 说:

echo '1a 111111222222' a

泥偶 说:

还有

echo "1a 111111222222" a

泥偶 说:

测试就能看出区别

泥偶 说:

\ 会转义后面的字符

泥偶 说:

结果就是 \ 后面的 回车字符被 Shell 处理了

泥偶 说:

sed "1a 111111\222222" a

泥偶 说:

用双引号的话,要多写一个 * 陈绪 说:

嗯,我看看

* 陈绪 说:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航