【转帖】vim/sed/awk/grep等文件批处理总结
vim/sed/awk/grep等文件批处理总结
https://www.cnblogs.com/cangqiongbingchen/p/9760544.html
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+
:%s/^/\=line('.')."\t"/ # 在每行的行首添加行号数字和tab
:10,20s/^/\=line('.')."\t"/ # 从10到20行的行首添加数字和tab
: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
“|”模式中的或操作
\d 数字 [0-9] \D 非数字 [^0-9] \x 十六进制数 [0-9a-fA-F] \X 非十六进制数 [^0-9a-fA-F] \s 空白字符 [ ] (<Tab> 和<Space>) \S 非空白字符 [^ ] (除 <Tab> 和 <Space>之外) \l 小写字母 [a-z] \L 非小写字母 [^a-z] \u 大写字母 [A-Z] \U 非大写字母 [^A-Z]
Sed相关操作
1.指令
a\ 在当前行下面插入文本。 i\ 在当前行上面插入文本。 c\ 把选定的行改为新的文本。 d 删除,删除选择的行。 D 删除模板块的第一行。 s 替换指定字符 h 拷贝模板块的内容到内存中的缓冲区。 H 追加模板块的内容到内存中的缓冲区。 g 获得内存缓冲区的内容,并替代当前模板块中的文本。 G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。 l 列表不能打印字符的清单。 n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。 p 打印模板块的行。 P(大写) 打印模板块的第一行。 q 退出Sed。 b lable 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。 r file 从file中读行。 t label if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 T label 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。 w file 写并追加模板块到file末尾。 W file 写并追加模板块的第一行到file末尾。 ! 表示后面的命令对所有没有被选定的行发生作用。 = 打印当前行号码。 # 把注释扩展到下一个换行符以前。
2.替换标记
g 表示行内全面替换。 p 表示打印行。 w 表示把行写入一个文件。 x 表示互换模板块中的文本和缓冲区中的文本。 y 表示把一个字符翻译为另外的字符(但是不用于正则表达式) \1 子串匹配标记 & 已匹配字符串标记
3.元字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 \(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。 & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 \< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。 \> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。 x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。 x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。 x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
4.示例
sed 's/book/books/' file # 字符串替换sed -n 's/test/TEST/p' file # 只打印那些发生替换的行
sed -i 's/book/books/g' file # 替换源文件sed 's/book/books/g' file # 全局替换echo sksksksksksk | sed 's/sk/SK/3g' # 从第三个开始替换sed '/^$/d' file # 删除空行sed '2d' file # 删除第2行sed '2,$d' file # 删除第2行至文件末尾sed '$d' file # 删除最后一行sed '/^test/d' file # 删除以test开头的行echo this is a test line | sed 's/\w\+/[&]/g' # 匹配单词,替换成[单词]的形式sed 's/^192.168.0.1/&localhost/' file # 把以192.168.0.1开头的行替换为192.168.0.1localhostecho this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' # 把digit 7替换为7echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/' # 交换aaa和BBB的位置sed -n 's/\(love\)able/\1rs/p' file # 匹配loveable,替换为lovers,并打印出来这些替换的行sed '表达式' | sed '表达式' # 多个sed通过管道连接sed -n '/test/,/check/p' file # 打印test到check直接的行sed -n '5,/^test/p' file # 打印从第5行开始,到第一个以test开始之间的所有行sed '/test/,/west/s/$/aaa bbb/' file # 把test到west之间的行的末尾替换成aaa bbbsed -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文件的总大小
ps
aux |
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 |
sort
|
uniq
-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等文件批处理总结的更多相关文章
- vim/sed/awk/grep等文件批处理总结
Vim相关操作 1.基础 * 和 # 对对当前光标所在的单词进行搜索 %匹配括号移动,包括 (, {, [ K 查看man手册 ga 查看ascii值 g CTRL-G 统计字数,使用Visual模式 ...
- 1.Sed | Awk | Grep | Find
1.Sed | Awk | Grep | Find 可以参考的文档链接 CentOS7 查看 当前机器 已经启动的端口的Shell命令: netstat -lntup | awk -F' ' {'pr ...
- linux下的文本处理命令sed&awk&grep
Sedsed 是个精简的.非交互式的编辑器.他能执行和编辑vi和emacs相同的编辑任务.sed编辑器不提供交互使用方式:只能在命令行输入编辑命令.指定文件名,然后在屏幕上察看输出.sed编辑器没有破 ...
- sed & awk & grep 专题( 鸟哥 )
grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容分析并处理. awk(关键字:分析&处理) 一行一行的分析处理 awk '条件类型1{动作1}条 ...
- sed & awk & grep 专题
转载自:http://www.cnblogs.com/moveofgod/p/3540575.html grep, sed 与 awk 相当有用 ! gerp 查找, sed 编辑, awk 根据内容 ...
- Linux下sed,awk,grep,cut,find学习笔记
awk awk是一种程序语言,对文档资料的处理具有很强的功能.awk擅长从格式化报文或从一个大的文本文件中抽取数据. awk的命令格式为: awk [-F filed-separator] “comm ...
- sed awk grep三剑客常用
sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...
- [svc]linux正则实战(grep/sed/awk)
企业实战: 过滤ip 过滤出第二行的 192.168.2.11. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ine ...
- Shell编程四剑客包括:find、sed、grep、awk
一.Shell编程四剑客之Find Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...
随机推荐
- Vue --- 前后台总结
请求生命周期: 1.先请求路由,在去替换APP.vue中的router-views 2.@表示src 3.加载全局css: require('@/assets/....') 4.获取当前路由 this ...
- Java中多态
多态:把子类看成是父类,把实现类看成是接口,这样类就具有多种形态,称为多态. 在多态中访问成员变量,访问的是父类中的成员变量. 在多态中访问成员方法,先访问的是子类,看看子类有没有覆盖重写要访问的父类 ...
- docker容器配置加速器
1.编辑docker配置文件 vi /etc/docker/daemon.json 加入如下配置: {"registry-mirrors":["https://docke ...
- Greenplum 6 新功能 在线扩容工具GPExpand (转载)
Gpexpand是Greenplum数据库的扩容工具,可以为集群增加新节点从而可以存储更多的数据,提供更高的计算能力.Greenplum 5及之前,集群扩容需要停机增加新节点,然后对表数据做重分布.因 ...
- 抓取Dump文件的方法和工具介绍
一.Windows系统的任务管理器里抓dump 启动任务管理器,选中某个进程,右键,弹出菜单"创建转储文件" 注意事项: 当你在64位Windows系统上抓32位进程的dmup文件 ...
- LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力
二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...
- 基于Linux(中标麒麟)上QT的环境搭建——解决cannot find lGL的问题
接上一篇,QT在中标麒麟环境安装完成后遇到运行报错的问题 一.问题描述: 在中标麒麟上配置好QT的环境后,新建一个工程,不做其他的任何操作,直接运行都会报cannot find lGL的错误.如图所示 ...
- nRF51822 主从断开连接Reason,HCI ERROR CODE :0x003E
最近在给一个客户调主从一体的模块,基于S130,距离稍微远一点就会出现连接上后立马又断开连接的现象, 追踪了一下原因,给出的 HCI Error code 是 0x003E,暂且不知道这是什么鬼,查了 ...
- 微信小程序 base64格式图片的显示及保存
当我们拿到如下base64格式的图片(如下图)时, base64格式的图片数据: 如何显示 ? 使用image标签,src属性添加data:image/png;base64, (注意:若imgData ...
- Spring Boot 配置文件 bootstrap vs application 到底有什么区别?
用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .pr ...