Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2818475
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2012-02-29 23:52:16

cat file:
a b c a d a
s d d d x s a
h j s a s h j h
j d f j a s j k j

要求:删除行内与第一列字符重复的字符,shell、sed、awk各写一个。达到这个结果:
a b c d
s d d d x a
h j s a s j
j d f a s k



shell版:
  1. while read a b;do echo "$a ${b// $a}";done <file
[解析]
while可以读取数个变量,第一个变量代表第一个字符串(由IFS变量决定分割符),第二个代表变量代表第二个,依次类推,但是最后一个变量则代表剩下的所有,那么这里 $a 这是第一个字符串,$b 则是剩下的所有字符串,然后再对 $b 中的含有 $a 的进行全部替换为空。



awk版:
  1. awk '{a=$1;gsub(" ?"a,"");print a""$0}' file
[解析]
其实所有的原理都是替换,awk呢利用 gsub() 进行全局替换,这点注意双引号内的问号,这是一个正则,在双引号中使用正则,学名叫 Dynamic Regexps 。



sed版:
  1. sed ':a;s/^\(.\)\(.*\) \1/\1\2/;ta' file
[解析]
这个也是一样的,利用 t label 来完成替换。





阅读(4477) | 评论(3) | 转发(5) |
0

上一篇:Bash快捷键

下一篇:awk之ARGC 和 ARGV

给主人留下些什么吧!~~

zooyo2014-12-16 23:40:31

聆雨淋夜:LZ你好,awk版中gsub(" ?"a,"")没有看懂,能否解释更多一点

" ?"a,这是动态正则表达式,匹配"a"或者" a"这样的字符串。然后用gsub函数替换为空,也就是删除掉。参考http://www.gnu.org/software/gawk/manual/gawk.html#Computed-Regexps

回复 | 举报

聆雨淋夜2014-12-16 11:50:48

LZ你好,awk版中gsub(" ?"a,"")没有看懂,能否解释更多一点

惟吾无为2012-03-29 20:29:27

动态正则表达式, 长见识了.