陈绪 说:
有个麻烦问题和你讨论一下
用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
泥偶 说:
用双引号的话,要多写一个 * 陈绪 说:
嗯,我看看
* 陈绪 说:
对