(shell awk sed 动态正则)

[一个有趣的题目(shell awk sed 动态正则)]

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 来完成替换。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • sed与awk实例 文本间隔 在每一行后面增加一空行 将原来的所有空行删除并在每一行后面增加一空行。这样在输出的文...
    stuha阅读 2,023评论 0 20
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 4,044评论 0 2
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,648评论 0 0
  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 10,495评论 3 53
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,221评论 0 0

友情链接更多精彩内容