Vim相关操作

1.基础

  • * 和 # 对对当前光标所在的单词进行搜索
  • %匹配括号移动,包括 (, {, [
  • K 查看man手册
  • ga 查看ascii值
  • g CTRL-G 统计字数,使用Visual模式选取统计部分
  • q: 打开历史记录窗口
  • :marks 打开编辑标记窗口, `0 准确回到上一次退出vim的位置
  • gf 打开光标下的指定文件, CTRL-W f 在新窗口中打开
  • 格式转换: :set fileformat=unix
  • 增加/减少缩进: >>/<<
  • 块编辑: :set virtualedit=all , 退出 :set virtualedit= 。特别适用于表格编辑
  • gv 再次选定上次选择的Visual区域
  • CTRL-A , CTRL-X 对数字加/减
  • ls | vim - 从标准输入读取要编辑的内容
  • \c, \C 忽略/不忽略大小写匹配
  • / 重复前一次搜索
  • zM 关闭所有折行, zR 打开所有折行, zo, zc 打开,关闭某个折行
  • 剪切版: "xy 复制到x缓冲区, "xp 粘贴x缓冲区, "+y 复制到系统剪贴板, "+p 从系统剪切板粘贴

2.光标移动

  • 0 到行头
  • ^ 到本行的第一个非blank字符
  • $ 到行尾
  • g_ 到本行最后一个不是blank字符的位置
  • fa 到下一个为a的字符位置
  • ta 到a前一个字符处
  • 3fa 在当前行查找第三个出现的a
  • F和T 和f和t一样,只不过方向向反

3.可视化选择

  • v(单个字符) V(单行) CTRL+v(单列)
  • J 把所有的选择连接起来(变成一行)
  • < 或 > 左右缩进
  • = 自动缩进

4.替换

  • :20,100s/bc/a&d/g                          # 表示把bc替换为abcd(& 是一个特殊字符,表示被替换的内容。)
  • :%s/((d+))/="(".(submatch(1)+1).")"/g     # % 表示全文搜索,s表示替换,(d+
    1. :%s/^/\=line('.')."\t"/ # 在每行的行首添加行号数字和tab
    1. :10,20s/^/\=line('.')."\t"/ # 从10到20行的行首添加数字和tab
    1. :let counter=0|10,20g//let counter=counter+1|s/^/\=counter."\t" # 从0开始添加数字

5.匹配与搜索

  • /ab* “*”匹配任意个(零个或多个)b
  • /\(ab\)* “ab”作为整体
  • /ab\+ “+”至少一次
  • /folders\= “=”一次或零次
  • /ab\{m,n} 匹配至少m次,至多n次
  • /foo\|bar “|”模式中的或操作
  1. \d 数字 [0-9]
  2. \D 非数字 [^0-9]
  3. \x 十六进制数 [0-9a-fA-F]
  4. \X 非十六进制数 [^0-9a-fA-F]
  5. \s 空白字符 [ ] (<Tab> 和<Space>)
  6. \S 非空白字符 [^ ] (除 <Tab> <Space>之外)
  7. \l 小写字母 [a-z]
  8. \L 非小写字母 [^a-z]
  9. \u 大写字母 [A-Z]
  10. \U 非大写字母 [^A-Z]

Sed相关操作

1.指令

  1. a\ 在当前行下面插入文本。
  2. i\ 在当前行上面插入文本。
  3. c\ 把选定的行改为新的文本。
  4. d 删除,删除选择的行。
  5. D 删除模板块的第一行。
  6. s 替换指定字符
  7. h 拷贝模板块的内容到内存中的缓冲区。
  8. H 追加模板块的内容到内存中的缓冲区。
  9. g 获得内存缓冲区的内容,并替代当前模板块中的文本。
  10. G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
  11. l 列表不能打印字符的清单。
  12. n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
  13. N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
  14. p 打印模板块的行。
  15. P(大写) 打印模板块的第一行。
  16. q 退出Sed
  17. b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
  18. r file file中读行。
  19. t label if分支,从最后一行开始,条件一旦满足或者Tt命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
  20. T label 错误分支,从最后一行开始,一旦发生错误或者Tt命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
  21. w file 写并追加模板块到file末尾。
  22. W file 写并追加模板块的第一行到file末尾。
  23. ! 表示后面的命令对所有没有被选定的行发生作用。
  24. = 打印当前行号码。
  25. # 把注释扩展到下一个换行符以前。

2.替换标记

  1. g 表示行内全面替换。
  2. p 表示打印行。
  3. w 表示把行写入一个文件。
  4. x 表示互换模板块中的文本和缓冲区中的文本。
  5. y 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
  6. \1 子串匹配标记
  7. & 已匹配字符串标记

3.元字符集

  1. ^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
  2. $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
  3. . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d
  4. * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
  5. [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
  6. [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
  7. \(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
  8. & 保存搜索字符用来替换其他字符,如s/love/**&**/love这成**love**。
  9. \< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
  10. \> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
  11. x\{m\} 重复字符xm次,如:/0\{5\}/匹配包含50的行。
  12. x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有50的行。
  13. x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~100的行。

4.示例

  1. sed 's/book/books/' file # 字符串替换

sed -n 's/test/TEST/p' file                    # 只打印那些发生替换的行

  1. sed -i 's/book/books/g' file # 替换源文件
  1. sed 's/book/books/g' file # 全局替换
  1. echo sksksksksksk | sed 's/sk/SK/3g' # 从第三个开始替换
  1. sed '/^$/d' file # 删除空行
  1. sed '2d' file # 删除第2行
  1. sed '2,$d' file # 删除第2行至文件末尾
  1. sed '$d' file # 删除最后一行
  1. sed '/^test/d' file # 删除以test开头的行
  1. echo this is a test line | sed 's/\w\+/[&]/g' # 匹配单词,替换成[单词]的形式
  1. sed 's/^192.168.0.1/&localhost/' file # 把以192.168.0.1开头的行替换为192.168.0.1localhost
  1. echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' # 把digit 7替换为7
  1. echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/' # 交换aaa和BBB的位置
  1. sed -n 's/\(love\)able/\1rs/p' file # 匹配loveable,替换为lovers,并打印出来这些替换的行
  1. sed '表达式' | sed '表达式' # 多个sed通过管道连接
  1. sed -n '/test/,/check/p' file # 打印test到check直接的行
  1. sed -n '5,/^test/p' file # 打印从第5行开始,到第一个以test开始之间的所有行
  1. sed '/test/,/west/s/$/aaa bbb/' file # 把test到west之间的行的末尾替换成aaa bbb
  1. sed -e '1,5d' -e 's/test/check/' file # 先删除第1行到第5行,再把test替换为check

awk相关操作

1. 内建变量

$0 当前记录(这个变量中存放着整个行的内容)
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAME 当前输入文件的名字

2.示例

awk'BEGIN{FS=":"} {print $1,$3,$6}'OFS="\t" /etc/passwd    # 在处理前设置使用:作为分隔符,对/etc/passwd打印第1、3、6列

awk'$6 !~ /WAIT/ || NR==1 {print NR,$4,$5,$6}'OFS="\t"netstat.txt     # 匹配第6列不包含WAIT的行,并打印行号、第4、5、6列

awk'NR!=1{print > $6}'netstat.txt   # 按第6列的名字进行文件拆分

ls-l  *.py | awk'{sum+=$5} END {print sum}'  # 统计python文件的总大小

psaux | awk'NR!=1{a[$1]+=$6;} END { for(i in a) print i ", " a[i]"KB";}'  # 统计每个用户进程占用内存的大小

awk'length>80'file  # 获取长度大于80的行
netstat-ntu | awk'{print $5}'cut-d: -f1 | sortuniq-c | sort-nr    # 按连接数查看客户端IP

grep相关操作

grep 'nos_client' -nr .     # n表示打印行号,r表示递归查找

grep -noE 'gm_client\.[a-zA-Z_]+' vhttpservice.py     # E表示使用正则表达式匹配,o表示仅打印匹配结果

$grep -C 5 'parttern' inputfile //打印匹配行的前后5行
 
$grep -A 5 'parttern' inputfile //打印匹配行的后5行
 
$grep -B 5 'parttern' inputfile //打印匹配行的前5行

vim/sed/awk/grep等文件批处理总结的更多相关文章

  1. 【转帖】vim/sed/awk/grep等文件批处理总结

    vim/sed/awk/grep等文件批处理总结 https://www.cnblogs.com/cangqiongbingchen/p/9760544.html Vim相关操作 1.基础 * 和 # ...

  2. 1.Sed | Awk | Grep | Find

    1.Sed | Awk | Grep | Find 可以参考的文档链接 CentOS7 查看 当前机器 已经启动的端口的Shell命令: netstat -lntup | awk -F' ' {'pr ...

  3. linux下的文本处理命令sed&awk&grep

    Sedsed 是个精简的.非交互式的编辑器.他能执行和编辑vi和emacs相同的编辑任务.sed编辑器不提供交互使用方式:只能在命令行输入编辑命令.指定文件名,然后在屏幕上察看输出.sed编辑器没有破 ...

  4. sed & awk & grep 专题( 鸟哥 )

    grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容分析并处理. awk(关键字:分析&处理) 一行一行的分析处理 awk '条件类型1{动作1}条 ...

  5. sed & awk & grep 专题

    转载自:http://www.cnblogs.com/moveofgod/p/3540575.html grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容 ...

  6. Linux下sed,awk,grep,cut,find学习笔记

    awk awk是一种程序语言,对文档资料的处理具有很强的功能.awk擅长从格式化报文或从一个大的文本文件中抽取数据. awk的命令格式为: awk [-F filed-separator] “comm ...

  7. sed awk grep三剑客常用

    sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...

  8. [svc]linux正则实战(grep/sed/awk)

    企业实战: 过滤ip 过滤出第二行的 192.168.2.11. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ine ...

  9. Shell编程四剑客包括:find、sed、grep、awk

    一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...

随机推荐

  1. 【bzoj4676】 两双手

    http://www.lydsy.com/JudgeOnline/problem.php?id=4767 (题目链接) 题意 求在网格图上从$(0,0)$走到$(n,m)$,其中不经过一些点的路径方案 ...

  2. linux(1):VMware虚拟软件下安装centos6.8

    前言:Linux是一种自由和开放源代码的类UNIX操作系统,继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.本人学习Linux已经有一段时间了,从一开始的小白到现在的略有所悟 ...

  3. yolo-v2只识别person

    一.修改源代码 (1)修改cfg/voc.data classess=20    改成 classes = 1 (2)修改data/voc.names 只留下person这一类 (3)修改exampl ...

  4. SQL Server 事务与隔离级别实例讲解

    上班途中,你在一处ATM机前停了下来.正当你在敲入密码的时候,你的一位家人也正在镇上的另一处TAM机上输入密码.你打算从某个还有500元余额的账户上转出400元,而你的家人想从同一账户取走300元.倘 ...

  5. python---django中models配置修改数据库引擎

    Django支持多种数据库,sqlite,mysql,oracle等,其默认数据库是sqlite 在settings文件中可以发现: DATABASES = { 'default': { 'ENGIN ...

  6. 【1】ConcurrentModificationException 异常解析和快速失败,安全失败

    目录 一.引起异常的代码 二.foreach原理 三.从ArrayList源码找原因 四.单线程解决方案 五.在多线程环境下的解决方法 一.引起异常的代码 以下三种的遍历集合对象时候,执行集合的rem ...

  7. [整理]HTML5 WebSocket

    vs2013 win7 iis7.5貌似不行,查阅了资料,好像得iis8支持 <ASP.NET SignalR系列>第一课 认识SignalR http://www.cnblogs.com ...

  8. Jad查看源码

    需要者两个文件:下载地址:http://pan.baidu.com/s/11qq4I 1,解压jar包 有两个文件 分别是net.sf.jadclipse_3.3.0 jad.exe 文件 2,找到m ...

  9. c++刷题(43/100)矩阵旋转打印

    题目1:矩阵旋转打印 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则 ...

  10. 蓝桥杯 问题 1110: 2^k进制数 (排列组合+高精度巧妙处理)

    题目链接 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2 ...