Linux 命令总结(二)

一、正则表达式

grep:显示匹配行

  • -v:反显示
  • -e:使用扩展正则表达式 grep -E “ ” xxx.txt 用来省去 扩展需要输入的

匹配操作符

  •   转义字符
  • . 匹配任意单个字符
  • [1249a],[ ^ 12 ],[ a - k ] 字符序列单字符占位
  • ^ 行首
  • $ 行尾
  •  <,  > 单词首尾边界
  • | 连接操作符
  • (,) 选择操作符
  • \n 反向引用

重复操作符

  • ?匹配0到1次。
  • *匹配0到多次。
  • +匹配1到多次。
  • {n} 匹配n次。
  • {n,} 匹配n到多次。
  • {n,m} 匹配n到m次。

与扩展正则表达式的区别:grep basic

?,  +,  {,  |,  (, and  )

匹配任意字符

.*

示例

创建文件 grep.txt ,文件内容如下:

ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx
oo1234xx
ooxyzxx

示例2:

创建test文件,文件内容如下:

aaabbcaaa
aa bbc aaa
bb bbc bbb
asgodssgoodsssagodssgood
asgodssgoodsssagoodssgod
sdlkjflskdjf3slkdjfdksl
slkdjf2lskdjfkldsjl

接下来查看下列输出匹配各是什么结果:

cat test

  • grep "a" test
  • grep "a{3}" test
  • grep "<aaa" test
  • grep "<aaa>" test
  • grep "b" test
  • grep "b{2,3}" test
  • grep "god" test
  • grep "godgood" test
  • grep "god*good" test
  • grep "god.*good" test
  • grep "god.* good.* god.*good" test
  • grep "god.*good+" test
  • grep "  (god.*good  )+" test
  • grep " (god ).* good.*\1" test
  • grep " (god  ).*  (good  ).* \1.*\2" test 反向引用的例子
  • grep " (god  ).*  (good  ).* \1.*\2" test
  • grep " (god ).*  (good  ).* \2.* \1" test

二、文本分析处理

cut:显示切割的行数据

  • -f:选择显示的列
  • -s:不显示没有分隔符的行
  • -d:自定义分隔符

示例:

扫描二维码关注公众号,回复: 6143380 查看本文章

sort:排序文件的行

  • -n:按数值排序
  • -r:倒序
  • -t:自定义分隔符
  • -k:选择排序列
  • -u:合并相同行
  • -f:忽略大小写

示例:

wc:文本统计

sed:行编辑器

说明sed的语法是:sed [options(参数)] 'Address(地址)Command(命令)' file(文件) ...

sed:行编辑器options

  • -n: 静默模式,不再默认显示模式空间中的内容
  • -i: 直接修改原文件
  • -e SCRIPT -e SCRIPT:可以同时执行多个脚本
  • -f /PATH/TO/SED_SCRIPT
  • -r: 表示使用扩展正则表达式

sed:行编辑器Command

  • -d: 删除符合条件的行;
  • -p: 显示符合条件的行;
  • -a \string: 在指定的行后面追加新行,内容为string
    • \n:可以用于换行
  • -i \string: 在指定的行前面添加新行,内容为string
  • -r FILE: 将指定的文件的内容添加至符合条件的行处
  • -w FILE: 将地址指定的范围内的行另存至指定的文件中;
  • -s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
  • -g: 行内全局替换
  • -i: 忽略字符大小写
  • -s///: s###, s@@@
    •  ( ), \1, \2

sed:行编辑器Address

  • 可以没有
  • 给定范围 如 : 第几行 1,2,3
  • 查找指定行 如:/str/

简单示例:

实用示例:修改inittab文件:

我们通过sed 's/\(id:\)[0-6]\(:initdefault:\)/\15\2/ig' inittab将3设置为5,结果如下:

实用示例:修改ip:

sed "s/\(IPADDR=\(\<2[0-5][0-5]\|\<2[0-4][0-9]\|\<1\?[0-9][0-9]\?\.\)\{3\}\).*/\188/" ifcfg-eth0将IP地址末尾改为188

awk 文本分析工具(重要)

  • awk是一个强大的文本分析工具。
  • 相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
  • 简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk语法: awk -F '{pattern(模式匹配) + action(动作)}' {filenames(文件名称)}

  • 支持自定义分隔符
  • 支持正则表达式匹配
  • 支持自定义变量,数组 a[1] 、 a[tom] == map(key) 这里的数组可以相当于map
  • 支持内置变量
    • ARGC 命令行参数个数
    • ARGV 命令行参数排列
    • ENVIRON 支持队列中系统环境变量的使用
    • FILENAME awk浏览的文件名
    • FNR 浏览文件的记录数
    • FS 设置输入域分隔符,等价于命令行 -F选项
    • NF 浏览记录的域的个数
    • NR 已读的记录数
    • OFS 输出域分隔符
    • ORS 输出记录分隔符
    • RS 控制记录分隔符
  • 支持函数
    • print、split、substr、sub、gsub
  • 支持流程控制语句,类C语言
    • if、while、do/while、for、break、continue

示例,查找passwd文件:

  • 只是显示/etc/passwd的账户:CUT
    • awk -F':' '{print $1}' passwd
  • 只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行开始前添加列名name,shell,在最后一行添加"blue,/bin/nosh"(cut,sed)
    • awk -F':' 'BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}' passwd
  • 搜索/etc/passwd有root关键字的所有行
    • awk '/root/ { print $0}' passwd
  • 统计/etc/passwd文件中,每行的行号(NR),每行的列数(NF),对应的完整行内容

示例,统计报表:合计每人1月工资,0:manager,1:worker:

创建文件awk.txt

执行命令:awk '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5;if($2=="0"){role[$1]="M"}else{role[$1]="W"}}} END{for(i in name){print i "\t" name[i]"\t" role[i]}}' awk.txt

结果:

也可以将命令写入文件,然后读取文件执行命令:

猜你喜欢

转载自www.cnblogs.com/nm666/p/10822941.html