everything in linux is file.

今天学习的是个人觉得最常用的两个命令行:sed 。这也是流的行操作命令,sed是line的操作。

实例sed

  • d 删除所有行
  • 6d 删除第6行
  • /^$/d 删除所有空行
  • 1,10d 删除1~10行
  • 1,/^$/d 删除第一行到第一个空行
  • /^$/,$d 从第一个空行一直删除到文件到最后一行
  • /^$/,10d 从第一个空行删除到第10行
  • /^ya*y/,/[0-9]$/d 从包含yay,yaay yaaay等的第一行删除到以数字为结尾的第一行
  • sed ‘2a drink tea’ 第二行添加drink tea,添加后即为第三行为drink tea.添加内容中\为newline
  • sed ‘2i something’ 第二行前添加something
  • sed ‘2,5c No number’ 第二行到第五行变成了No number这一行了
  • sed -n ‘2,5p’ 仅仅打印出第二到第五行
  • sed ‘root/d’ 删除包含root的行
  • sed -n ‘/root/p’ 只打印包含root的行
  • sed ‘s/旧串/新串/g’ 替换

多重操作

[/patten/[,/pattern/]]{ command1 command2 command3 }

操作参数

  • s substitute取代
  • a append新增
  • i insert插入
  • c change取代
  • d delete删除
  • p print打印
  • y transform
  • q quit

Sed 语法

sed [-n] [-e] [‘command’] [file…] sed [-n] [-f scriptfile] [file…]

-n只有经过sed特殊处理的那行才被列出来

-fscriptfile 下一个参数是文件名,该文件包含编辑操作

-e下一个参数编辑操作而不是文件名。

-rsed的动作支持是延伸性正规表示法的语法

-i直接修改读取的文件,不输出到终端


实例awk

  • ls | awk 'BEGIN {print "List of html files:"} /\.html$/ {print} END {print "There you are!"}'
  • $0 整行
  • $1 第一部分
  • { print “total pay for”, $1,”is”, $2 * $3 }
  • { printf(“total pay for %s is $%.2f\n”,$1, $2 * $3) }
  • $2 > 5 {print} $2 * $3 > 50 {print} $1 == “NYU” $2 ~ /NYU/ NR > 10 && NR <= 20
  • $3>15{emp=emp+1} END {print emp}
  • {pay = pay + $2 + $3} END {print NR,pay/NR}
  • {if (n>0) {print n} else {print 0}}
  • while do{}while()
  • for
  • array – {line[NR] = $0}END{print line[3]} for循环print
  • NR:Number of records processed NF:Number of fields in current record
  • FILENAME ; FS ; OFS ; ARGC/ARGV;
  • 操作:=;==;!=;&&;||;!;<,>,<=,>=;+,-,/,*,%,^;string

后记:sed和awk的功能太强大了,特别是awk,可以作为一个小的语言处理很多事情了。Linux系的东西真的有好多还要继续学习。最好的学习方法就是学以致用了。