linux 正规表示法,grep,sed,awk 简单记录

正规表示法(正则表达式):就是处理文本和字符串的方法。

正规表示法与通配符 不要混淆,两个是不一样的东西。

正则表示法的一些特殊符号:linux鸟哥P419

技术分享


grep 进阶例子:分析文本一行文字,若关键字存在就整行取出来

搜索特定字符串以特殊颜色显示出来: grep -n --color=auto ‘the‘ 1.rtf -n 显示行数

反向选择: grep -vn ‘the‘ 1.rtf

利用[] 搜寻集合字符: grep -n ‘t[ae]st‘ --color=auto 1.rtf  搜索 tast 与 test

     grep -n ‘[^g]oo’ 1.rtf搜索oo前面不是g 的字符

     grep -n ‘[^a-z]oo‘ 1.rtf 搜索oo前面不为 a-z的字符

     grep -n --color=auto ‘[^a-zA-Z0-9]‘ 1.rtf  查找文件中不为a-zA-Z0-9 的字符,并用颜色标出

     grep -n --color=auto ‘[^[:lower:]]‘ 5.rtf查找不为小写字符的字符

     grep -n --color=auto ‘[[:digit:]]‘ 5.rtf查找数字0-9

     grep -n --color=auto ‘^To‘ 5.rtf查找每行首 ^  为To的的字符  后面To是区分大小的

行首和行尾字符 ^ $

     grep -n ‘^[^a-zA-Z]‘ 5.rtf查找行首为非字母 的字符

     grep -n ‘^[^[:alpha:]]‘ 5.rtf 查找行首为非字母 的字符

     grep -n ‘^$‘ 5.rtf找出空白行

正规表达式: .   代表一定有一个字符 (通配符是用?表示)

       *   代表前一个0重复无穷次的意思  (通配符代表任意多个字符)

grep -n ‘g..d‘ 5.rtf  查找g??d字符

grep -n ‘oo*‘ 5.rtf查找两个或更多连续的 o字符

grep -n ‘g*g‘ 5.rtf只要该行有一个g就会查出

grep -n ‘g.*g‘ 5.rtf找出两个以上 gg

基础正规表示法字符:P427

技术分享

     

sed : 一个管线命令,可将数据进行取代、删除、新增摘取特定行功能

显示时删除 2到5行:  nl 2.rtf | sed ‘2,5d‘

在第二行后加上文字drink tea : nl 2.rtf | sed ‘2a drink tea‘

在第二行前面加上文字 drink tea : nl 2.rtf | sed ‘2i drink tea‘

新增加两行(中间使用 \) : nl 2.rtf | sed ‘2a drink tea  \ drink beer‘

将2-5行替换为 drink beer :  nl 2.rtf | sed ‘2,5c drink beer‘

直接显示5-7行: nl 2.rtf | sed -n ‘5,7p‘    -n 安静模式 不用会显示很对多余的

替换字符:  cat 2.rtf | sed ‘s/255/234/g‘ > 123.rtf   把2.rtf文件中得255替换为234  然后写入123.rtf   ‘s/要替换的字符/替换成什么/g‘

去掉#注释和空白行: cat 2.rtf | grep ‘MAN‘ | sed ‘s/#.*$//g‘ | sed ‘/^$/d‘

sed可直接修改档案内容: sed -i ‘$a hahaha‘  2.rtf  直接在最后一行加入hahaha字符


延伸正规表示法egrep(可了解下,不太重要)

awk: 管线命令,倾向于把一行分成数个 字段 来处理, 字段的分割符为 ‘空格键’ 或 tab 键

例:last -[n] 5  显示最近登录的5条记录

last -n 5 | awk ‘{print $1 "\t" $3}‘      打出第一栏和第三栏  单引号中间要用双引号 这里用的是print  不能用echo printf

last -n 5|awk ‘{print $1 "\t lines:" NR "\t columes: " NF}‘  打印当前处理到 第几行 和 每行的 字段 数  

cat /etc/passwd | awk  ‘{FS=":"} $4<10 {print $1 "\t" $3}‘FS=":" 设置字段分割符为 :  可以用逻辑运算符  如果第4个字段<10 打印 1 和 3 字段 中间用tab分割

awk 配合 printf 可以完成对数据的累加与格式化显示处理

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。