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 : 一个管线命令,可将数据进行取代、删除、新增摘取特定行功能
d 显示时删除 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‘
c 将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 可以完成对数据的累加与格式化显示处理
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。