[关闭]
@WillireamAngel 2018-08-13T06:48:28.000000Z 字数 5846 阅读 1696

Linux文本编辑命令

Linux


awk

简介

组成:模式+操作
awk适用于文本处理和报表生成,对输入的文本执行行操作,每行执行代码块操作。
基本格式:
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s) -f文件为awk程序
awk 'bool{action}' file
运行脚本用''表示,代码块用{}表示,其中的一些纯文本块用""打印,默认分隔符,表示空格。
转换:
数字转字符串:+连接,非数字的第一个字符及以后均忽略,非数字值为0
字符串转数字:""连接变量运算

对于无文件只做打印操作的时候,可以使用echo | awk的方式传给awk文件

内置变量

  1. cat /etc/passwd|awk '{FS=":"} $3<10 {print $1 "\t" $3}' #第一行不会正确执行,因为读入第一行时,分隔符还是tab,
  2. cat /etc/passwd|awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'

运算符

赋值:

  1. = += -= *= /= %= ^=(或**=)

逻辑运算:

  1. || &&

正则匹配:

  1. ~ !~

关系运算符:

  1. < <= > >= != == #字符串比较按照ASCII码比较

算术运算符:

  1. * / & 乘除求余
  2. + - !
  3. ^ *** 幂运算
  4. ++ -- #操作数转换为数值,非数值变为0,第一个非数值及以后均消失None
  1. root@WA:awk 'BEGIN{a="20b4";print a++,++a}'
  2. 20 22

其它运算符:

  1. $ 引用
  2. 空格 子串链接符
  3. ?: 三目运算符 #表达式1 ? 表达式2 : 表达式3,表达式1成立则执行表达式2,否则执行表达式3
  4. in 数组中是否存在某键值

转义字符

  1. \a 响铃
  2. \b 退格(Backspace
  3. \f 换页
  4. \n 换行
  5. \r 回车
  6. \t TAB
  7. \v 垂直制表
  8. \0 NULL

正则表达式

awk '/expression/{action}' file

  1. ^
  2. $
  3. . 任单字符
  4. * 匹配0个或多个前导字符
  5. + 匹配1个或多个前导字符
  6. ? 匹配0个或1个前导字符
  7. [] 匹配指定字符组中的任意一个
  8. [^] 匹配不在指定字符组中的任意一个
  9. () 子表达式
  10. |
  11. \ 转义
  12. ~,!~ 匹配/不匹配
  13. x{m,n} 重复mn

if、循环和数组

条件语句

  1. {
  2. if(){
  3. }
  4. }

循环

  1. {
  2. do{
  3. }while()
  4. }

数组

awk的数组都是关联数组,数字索引会转变为字符串索引。
for...in...输出无序关联数组。
统计数组:
查看服务器连接状态并汇总:

  1. netstat -an | awk '/^tcp/{++s[$NF]}END{for(a in s)print a,s[a]}'

查看web日志访问流量并输出访问次数,请求页面或图片,每个请求的总大小。

  1. awk '{a[$7]+=$10;++b[$7];total+=$10}END{for(x in a)print b[x],x,a[x]}|"sort -rn -k1";print"total size is :"total}' /app/lpg/access_log

字符串函数

常见函数:

  1. gsub(EreRepl,[in]) #查找[in]中,匹配Ere,替换为Repl
  2. sub(EreRepl,[in])
  3. index(string1,string2) #查找
  4. match(string,Ere) #正则匹配查找
  5. length[(string)]
  6. blength[(string)]
  7. substr(string,M,[N]) #截取string中M到N的字符
  8. split(string,A,[Ere]) #以[Ere]为分隔符(未指定则使用FS),分隔元素为A数组中元素,可使用A[n]来读取元素
  9. tolower(string) #大写变小写
  10. toupper(string) #小写变大写
  11. sprintf(format,Expr,Expr,...) #格式化
  12. printf(format,Expr,Expr,...) #格式化打印输出
  13. system() #调用linux系统命令
  14. getline #输出重定向
  1. awk 'BEGIN{info="this is sensphone8";gsub(/[0-9]+/,"ok",info);print info}'
  1. awk 'BEGIN{info="this is sensphone8";print index(info,"is")?"ok":"no"}'

match:

  1. awk 'BEGIN{info="this is sensphone8";print match(info,/is/)?"ok":"no"}'

截取:

  1. awk 'BEGIN{info="this is sensphone8";print substr(info,4,10)}'

分隔:

  1. echo | awk 'BEGIN{info="this is sensphone8";split(info,ta," ");print length(ta);for(k in ta){print k,ta[k]}}'
  1. 3
  2. 1 this
  3. 2 is
  4. 3 sensphone8

格式化:

  1. awk 'BEGIN{info="this is sensphone8";print sprintf("%d",info)}'
  2. #如何把一行竖排的数据转换成横排?
  3. awk '{printf("%s ",$1)}' filename

输出重定向:

  1. seq 10 | awk '{getline; print $0}' #偶数
  2. seq 10 | awk '{print $0; getline}' #奇数
  3. seq 10 | awk '{getline tmp; print tmp; print $0}' #先偶后奇
  4. awk '{printf "%s ", $0; getline < "b.txt"; print $0}' a.txt #先打印a.txt再打印b.txt
  5. awk 'BEGIN {"date" | getline; close("date"); print $0}' #执行UNIX命令并返回值

getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。

常用格式替换符:

格式化字符 含义
%s 字符串
%f 浮点格式
%c ASCII字符,即显示对应参数的第一个字符
%d,%i 十进制整数
%o 八进制值
%u 不带正负号的十进制值
%x 十六进制值(a-f)
%X 十六进制值(A-F)
%% 表示%本身

Sed

简介

sed是一款非交互式编辑器,所有编辑文件都存在临时缓存区中,处理完成一行文本便打印输出,处理完最后一行后便退出,一般对源文件无影响。

sed之所以能以行为单位的编辑或修改文本,其原因在于它使用了两个空间:一个是活动的“模式空间(pattern space)”,另一个是起辅助作用的“暂存缓冲区(holdingspace)这2个空间的使用。

sed编辑器逐行处理文件,并将输出结果打印到屏幕上。sed命令将当前处理的行读入模式空间(pattern space)进行处理,sed在该行上执行完所有命令后就将处理好的行打印到屏幕上(除非之前的命令删除了该行),sed处理完一行就将其从模式空间中删除,然后将下一行读入模式空间,进行处理、显示。处理完文件的最后一行,sed便结束运行。sed在临时缓冲区(模式空间)对文件进行处理,所以不会修改原文件,除非显示指明-i选项。

Sed命令

基本语法:

  1. sed [option] 'command' flie

定位

Sed正则

  1. ^
  2. $
  3. .
  4. *
  5. []
  6. [^]
  7. \(..\) #保存已匹配的字符
  8. & #保存查找串以便在替换串中引用
  9. \< 词首定位符
  10. \> 词尾定位符
  11. x\{m,n\} 连续

Sed常用选项

  1. sed -nefri 动作
  2. -n 只显示被处理的行
  3. -e 直接在命令行进行动作编辑,允许操作多个动作,命令顺序会影响结果
  4. --expression= 方法使用优于-e
  5. -f 执行filename中的动作
  6. -r 支持扩展型正则
  7. -i 直接修改文件内容,不输出到屏幕(此时需要添加-i才会对源文件进行修改)
  8. 可加/**/设置匹配项,不加nefri,直接加文件,

Sed操作命令

sed命令:

  1. i\在当前行之前插入文本
  2. a\当前行后添加一行或多行
  3. c\新文本替换当前行的文本
  4. d删除行
  5. h模式空间文件内容复制到暂存缓冲区
  6. H模式空间文件内容追加到暂存缓冲区
  7. g取出暂存缓冲区里的内容,复制到模式空间,覆盖原有内容
  8. G取出暂存缓冲区里的内容,复制到模式空间,追加原有内容
  9. I列出非打印字符
  10. p打印行
  11. n读入下一行,并从下一条命令(非第一条命令)开始处理
  12. q结束或退出sed
  13. r从文件中读入行
  14. !对所选行以外的所有行应用命令
  15. s用一个字符串替换另一个

替换标志:

  1. g在行内进行全局替换
  2. p打印行
  3. w将行写入文件
  4. x交换暂存缓冲区与模式空间的内容
  5. y将字符转换为另一字符(不能应用于正则表达式)

Sed错误信息

sed会输出简单的错误信息,如果无法判断错误信息,会“断章取义”,没有语法错误,sed会输出退出状态码,0为正常运行。

Sed基本用法

打印p

删除d

替换s

指定行范围

行的范围从一个地址开始到另一个地址结束,可使用N,M,也可以使用/text1/,/text2/,也可以二者混用。所有的匹配行均满足最短匹配原则。
- sed -n '3,5p' flie
- sed -n '3,/text1/p' flie
- sed -n '3,/test1/s/text1/text2/' flie
对3行到test1行的所有行进行替换操作

多次编辑e

追加a

插入i

修改c

获取下一行n

转换y

退出q

grep

grep
文件搜索打印
grep -acinv --color=auto '关键字' filename

原理

命令格式:
grep [选项] 模式 文件
grep查找成功会返回相应的查找行,退出状态0;如果没找到,退出状态1;如果找不到指定文件 ,退出状态2。

正则表达式

  1. ^
  2. $
  3. .
  4. *
  5. []
  6. [^]
  7. \(..\)
  8. &
  9. \<
  10. \>
  11. x\{m,n\}

选项参数

  1. -E grep -E = egrep
  2. -i 忽略大小写
  3. -w 把表达式作为一个完整的词来查找"\<...\>"
  4. -x 被匹配的内容正好是整个行"^...$"
  5. -v 反向查找
  6. -c count统计匹配结果的行数
  7. -m 匹配规定的行数
  8. -n 显示输出结果在原文件中的行号
  9. -o 只显示匹配内容
  10. -R 递归匹配,匹配一个目录的多个文件或者多个目录
  11. -B 输出满足条件的前几行
  12. -A 输出满足条件的后几行
  13. -C -B -A 同时输出前后n
  14. -I 只输出包含模式的文件名

egrep

egrep
增加更多元字符
正则:

  1. ^
  2. $
  3. .
  4. *
  5. []
  6. [^]
  7. #新增
  8. + 匹配1个或多个前导字符
  9. ? 匹配0个或1个前导字符
  10. a|b 匹配ab #grep不支持|
  11. () 匹配字符组
  12. #不包含\{\}或\(\)

友情链接

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注