设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站已关闭,不再开放。PC时代已远逝,拥抱云原生时代,拥抱k8s,请移步:https://www.v2k8s.com

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 29633|回复: 14

[sed] 多个空格替换成一个空格   [复制链接]

Rank: 8Rank: 8

签到
264
注册时间
2010-10-25
最后登录
2016-6-29
在线时间
356 小时
阅读权限
90
积分
23577
帖子
271
主题
44
精华
0
UID
10721
发表于 2012-1-4 10:59:27 |显示全部楼层
panda@panda-Vostro1310:~/code/shell$ cat data
hhhhh   bbeebc   abbc bbb  bbbb
hhhhh   bbc    bbc bbb  bbbb

panda@panda-Vostro1310:~/code/shell$ cat data | sed 's/\s+/ /g'
hhhhh   bbeebc   abbc bbb  bbbb
hhhhh   bbc    bbc bbb  bbbb


+匹配1次或者多次,以上方法有错,求解!

Rank: 8Rank: 8

注册时间
2010-7-26
最后登录
2020-10-4
在线时间
135 小时
阅读权限
90
积分
31929
帖子
147
主题
42
精华
0
UID
9913
发表于 2012-1-4 11:03:33 |显示全部楼层
  1. sed 's/  */ /g'
复制代码
这样试试~~

*之前有两个空格~~~
两个//之间有一个空格~~

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-10-25
最后登录
2016-6-29
在线时间
356 小时
阅读权限
90
积分
23577
帖子
271
主题
44
精华
0
UID
10721
发表于 2012-1-4 11:15:08 |显示全部楼层
容嬷嬷 发表于 2012-1-4 11:03
这样试试~~

*之前有两个空格~~~

panda@panda-Vostro1310:~/code/shell$ cat data | sed 's/  */ /g'
hhhhh bbeebc abbc bbb bbbb
hhhhh bbc bbc bbb bbbb

这样就对了


我之前的错在哪里了呢?

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-10-25
最后登录
2016-6-29
在线时间
356 小时
阅读权限
90
积分
23577
帖子
271
主题
44
精华
0
UID
10721
发表于 2012-1-4 11:42:06 |显示全部楼层
zuopucuen 发表于 2012-1-4 11:40
cat data | sed 's/\s\+/ /g'
+ 是需要转意的

噢,原来这样阿!thanks

使用道具 举报

论坛元老

200斤的小可爱

Rank: 8Rank: 8

注册时间
2009-1-21
最后登录
2020-7-8
在线时间
76 小时
阅读权限
90
积分
13130
帖子
72
主题
2
精华
0
UID
1124
发表于 2012-1-4 23:12:25 |显示全部楼层
本帖最后由 guoli0813 于 2012-1-4 23:14 编辑
panda 发表于 2012-1-4 11:42
噢,原来这样阿!thanks


[root@centos ~]# sed 's/[[:space:]][[:space:]]*/ /g' data
hhhhh bbeebc abbc bbb bbbb
hhhhh bbc bbc bbb bbbb
我解释下这个吧,* 代表了前一个字符的0个或者多个,假如是这样的表达式:
[root@centos ~]# sed 's/[[:space:]]*/ /g' data 就代表了没有空格的也会被有空格的分割开了

[root@centos ~]# cat data | sed 's/\s\+/ /g' -

以上语句小哥可否解释一下。(还有假如没有后面的-(横杠),就会发邮件一封)
[root@centos ~]# cat data | sed 's/\s\+/ /g'
hhhhh bbeebc abbc bbb bbbb
hhhhh bbc bbc bbb bbbb
You have mail in /var/spool/mail/root

假如不注意的话,会造成根分区慢慢就变满了,会有硬盘空间报警的产生。
骑行,0.2吨,无厘头的闷骚,嗜睡。每个月总有那么几天。。。

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-10-25
最后登录
2016-6-29
在线时间
356 小时
阅读权限
90
积分
23577
帖子
271
主题
44
精华
0
UID
10721
发表于 2012-1-5 09:18:46 |显示全部楼层
guoli0813 发表于 2012-1-4 23:12
[root@centos ~]# sed 's/[[:space:]][[:space:]]*/ /g' data
hhhhh bbeebc abbc bbb bbbb
hhhhh bbc bb ...

’+‘  这是匹配前面的空格(\s)一次或者多次。  意义同 \s \s* 。。
对于后边你所说的要加 ‘-’ ,不加会有告警,这一点我确实不知道,告警的内容是什么,仔细看看,再推断一下原因吧!

使用道具 举报

论坛元老

200斤的小可爱

Rank: 8Rank: 8

注册时间
2009-1-21
最后登录
2020-7-8
在线时间
76 小时
阅读权限
90
积分
13130
帖子
72
主题
2
精华
0
UID
1124
发表于 2012-1-5 16:29:14 |显示全部楼层
panda 发表于 2012-1-5 09:18
’+‘  这是匹配前面的空格(\s)一次或者多次。  意义同 \s \s* 。。
对于后边你所说的要加 ‘-’ ,不加 ...

兄弟,我认真的研究了一下:找了一些资料,完整的追溯一下,呵呵 我觉得很happy。
还是我的方法最简单
sed '/^\s*$/d'



LS的方法真简单,\s这个参数俺从来没用到过,请问在哪能查到?
谢谢哈

mystérieux 回复于:2008-07-13 23:45:16

引用:原帖由 灿烂小猪 于 2008-7-13 23:26 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8803738&ptid=15808]



LS的方法真简单,\s这个参数俺从来没用到过,请问在哪能查到?
谢谢哈


我在另一个贴里也提出过疑惑,似乎在我之前没有人这样用过,我觉得很怪,即使外国高手写的那个转得满世界全是的sed oneliner里也没有这样作,凡是匹配空格与tab不是[ \t] 就是[[:blank:]],我也猜想过,是不是sed新出的功能?我下载了sed源码,看了一下ChangeLog,本世纪没添什么新功能啊?不知道为什么这个用法没有写在sed有关的资料里,我并没有查sed比较齐全的资料,我猜想可能是没有,不然不会这么多人都不这样用,而宁可选择复杂的写法,我了解这个用法是因为perl中有,perl有关正则表达式的资料里都写得很明白,所以,在用sed的时候,就想,也许sed里会有相似的用法,试了一下确实有。
=======================================================================
walkerxk 回复于:2008-07-13 23:46:00

引用:原帖由 灿烂小猪 于 2008-7-13 23:26 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8803738&ptid=15808]



LS的方法真简单,\s这个参数俺从来没用到过,请问在哪能查到?
谢谢哈

\s就是[[:space:]]
这个是正则里面的。

明白了。理不辨不明呀。我自己学的估计又掠过去鸟。多谢
骑行,0.2吨,无厘头的闷骚,嗜睡。每个月总有那么几天。。。

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-7-26
最后登录
2020-10-4
在线时间
135 小时
阅读权限
90
积分
31929
帖子
147
主题
42
精华
0
UID
9913
发表于 2012-1-5 20:23:38 |显示全部楼层
guoli0813 发表于 2012-1-5 16:29
兄弟,我认真的研究了一下:找了一些资料,完整的追溯一下,呵呵 我觉得很happy。
还是我的方法最简单  ...

明白了~~
原来\s 是这中用法啊~~

以前一直没用过~~

学习了~

使用道具 举报

Rank: 8Rank: 8

注册时间
2009-5-23
最后登录
2015-10-9
在线时间
79 小时
阅读权限
90
积分
25804
帖子
123
主题
3
精华
0
UID
3217
发表于 2012-1-7 20:19:03 |显示全部楼层
sed默认的regex 是basic的。可以加-r参数

       -r, --regexp-extended

              use extended regular expressions in the script.


然后 sed -r 's/\s+/ /g' 即可

这样大家在sed里()前面也可以就省去烦人的\了

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-10-25
最后登录
2016-6-29
在线时间
356 小时
阅读权限
90
积分
23577
帖子
271
主题
44
精华
0
UID
10721
发表于 2012-1-7 22:12:07 |显示全部楼层
tjpm 发表于 2012-1-7 20:19
sed默认的regex 是basic的。可以加-r参数

       -r, --regexp-extended

学习了,感谢。。。。。。

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-8-20
最后登录
2015-8-10
在线时间
80 小时
阅读权限
90
积分
22802
帖子
58
主题
4
精华
0
UID
15466
发表于 2012-1-14 11:13:42 |显示全部楼层
tr -s [:space:]

tr更简单

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-10-25
最后登录
2016-6-29
在线时间
356 小时
阅读权限
90
积分
23577
帖子
271
主题
44
精华
0
UID
10721
发表于 2012-1-14 19:06:15 |显示全部楼层
rootstar 发表于 2012-1-14 11:13
tr -s [:space:]

tr更简单

谢谢提醒,确实!

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-1-14
最后登录
2014-8-7
在线时间
126 小时
阅读权限
90
积分
13184
帖子
245
主题
33
精华
0
UID
11752
发表于 2014-4-30 14:37:57 |显示全部楼层
分享一个链接:

里面介绍的正则匹配挺全的
http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-12-20
最后登录
2016-1-13
在线时间
103 小时
阅读权限
90
积分
25269
帖子
53
主题
9
精华
0
UID
16781
发表于 2014-5-6 16:40:59 |显示全部楼层
awk '{gsub(/[ ]+/," ",$0)}1' urfile

使用道具 举报

Rank: 8Rank: 8

注册时间
2013-8-13
最后登录
2016-7-15
在线时间
100 小时
阅读权限
90
积分
35018
帖子
20
主题
0
精华
0
UID
39284
发表于 2014-5-7 09:34:53 |显示全部楼层
本帖最后由 关阴月飞 于 2014-5-7 09:35 编辑

awk 'NF+=0' urfile
awk '$1=$1' urfile

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2021-3-9 11:31 , Processed in 0.030759 second(s), 14 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部