- A+
所属分类:shell学习笔记
在整理词库的过程中遇到 一个问题,有些其实是同一个关键词之关有空格的话,无法正常被去重,那么有没有办法能快快速去除这些字符中间的空格呢?经过百度一番,找到一个解决办法,记录一下。
效果如下图所示,图上半部分是示例文本,下半部分就是用shell去掉空格后的效果。其中用到就是下面第3个方法。
在UNIX上使用sed命令进行字符串处理中常常遇到的问题就是行首行尾的空格怎么删除。
下面介绍sed是怎样实现的,当然awk同样可以。
1、删除行首空格
sed 's/^[ \t]*//g'
注意上面\t前面有个空格的。
说明:
第一个/的左边是s表示替换,即将空格替换为空
第一个/的右边是表示后面的以xx开头
中括号表示“或”,空格或tab中的任意一种。这是正则表达式的规范。
中括号右边是*,表示一个或多个。
第二个和第三个\中间没有东西,表示空
g表示替换原来buffer(缓冲区)中的,sed在处理字符串的时候并不对源文件进行直接处理,先创建一个buffer,但是加g表示对原buffer进行替换。
整体的意思是:用空字符去替换一个或多个用空格或tab开头的本体字符串
2、删除行末空格
sed 's/[ \t]*$//g'
和上面稍微有些不同是前面删除了^符,在后面加上了美元符,这表示以xx结尾的字符串为对象。
但是要注意在KSH中,Tab并不是\t而是直接打入一个Tab就可以了。
3、删除所有的空格
sed s/[[:space:]]//g
原文地址:http://blog.csdn.net/yipie/article/details/7635163
2016-04-26 下午11:24
话说,shell弄出来的数据为什么前面会有很多空格呢,而且如果是两位数字开头的,是5个空格,而1位数字开头是6个空格,对齐了。
2016-01-03 上午1:09
sed ‘s/^[ t]*//g’的效果和sed ‘s/^ *//g’一样。 ^ *之间有空格。
删除行首空格把g去掉是可以的 sed ‘s/^ *//’。 (sed命令不加g默认就是替换行的第一个,g的意思是全局替换,在这里加上g也不能实现行中间的空格替换,还以为g不起作用的,容易混淆)
去掉*后sed ‘s/^ //g’只能删除行首空格,不能删除行首tab制表符。而sed ‘s/^t*//g’是不起作用的,删不掉tab。 似乎t 完全可以删除。
想删除tab制表符 直接用 *表示就行了。*前面有空格哦。 用不到t这个玩意
2016-01-03 上午12:15
似乎有些错误。 *的意思是任意零个或者多个前面的字符。上述删除行首的命令 sed ‘s/^[ t]*//g’ 实际上是把每行前面都换成了空。空本来没有东西,所以没有空格的行看不出变化。倘若写成这样的命令 sed ‘s/^[ t]*/方法/g’ 那么运行以后每一行前面都写了 方法两个字。
严谨一点感觉应该这样写 sed -r ‘s/^[ t]+//g’ 把*号换成+号,加号就是任意一个或者多个前面那个字符。 之所以加上-r参数是为了能使用 +。不写 -r就无法使用 +。
东方红同学的留言 。请方法先生批阅
2016-01-03 上午11:47
@东方红 不错!自觉能力蛮强,觉得很深了。
来自外部的引用: 1