vi/vim/sed/文件格式等常用命令
1、vi a.txt 进去文件,在没有进入编辑模式(i)下 操作如下:
编辑:
复制当前行: yy 粘贴:p 删除当前行:dd 清空文件: :%d 回退: u 撤销回退:ctrl+r
粘贴模式::set paste (解决复制粘贴格式错乱)
光标移动:
光标到页首: H 光标到页尾: L 光标到中部:M 显示行号: :set nu 取消显示行号: :set nonu 跳转到指定行(例如第5行): :5 翻上一页: ctrl+b 翻下一页: ctrl+f
查找:
查找字符串(例如aaa): /aaa 查找下一个(查找操作回车后输入): n 查找上一个(查找操作回车后输入): N
替换( / 可以用 # 代替):
全文替换(将apple/orange/mango 替换为fruit): :%s/apple\|orange\|mango/fruit/g 当前行(s前没有%)全替换(将foo替换为bar): :s/foo/bar/g 当前行替换首次(没有g结尾)出现: :s/foo/bar/ 不区分大小写替换(i标志): :s/foo/bar/i 指定行替换(3~5行)所有出现: :3,10s/foo/bar/g 相对行替换(当前行~接下来4行): :.,+4s/foo/bar/g 当前行到结尾替换: :.,$s/foo/bar/g
/g结尾就是global全局修改
s开头表示第几行开始,%s全部行,2s第二行
2、sed 命令
打印:
输出指定行(打印第二行): sed -n '2p' a.txt 输出非行(除了2到4行的全部内容): sed '2,4d' a.txt 替换输出(替换第 3 行中 89 替换成 99 数据) : sed '3s/89/99/g' a.txt
替换文件本身:
不会打印(替换第 3 行中 89 替换成 99 数据): sed -i '3s/89/99/g' a.txt 在所有行首添加222 : sed 's/^/222/g' 在所有行末添加222: sed 's/.$/222/g'
/g结尾就是global全局修改
s开头表示第几行开始,s全部行,2s第二行
^行首占位符,.$行尾占位符
3、awk命令
cat scallop.properties |awk -F '=' '{if($2>0&&NR>1) print $2}' 输出>1 行 第2个字段>0 的第二个字段 cat scallop.properties |awk -F '=' 'NR>1&&$2>0 {print $2}' 输出>1 行 第2个字段>0 的第二个字段 awk -F '=' '/200/ {print $0}' scallop.properties 输出包含200 的整行, cat scallop.properties |awk '/com/&&$17>1 {print($0)}' 包含com&&第17个字段>1 ,则打印整行 awk 'BEGIN {total=0;FS=":";print "现在开始统计"} {total=total+$2; print("计算:"$2);print("结果:"total)} END {print total}' scallop.properties
awk '{split($0,a,":");print a[1],a[2],a[3]}' 分割
- begin {定义total=0,FS分隔符,等前置条件 } { 循环体 } end {结果输出} 待处理文件
// 更多示例 cat stdout.log|awk '/time total/ {if((substr($9,7)+0)>10000) print($0)}' cat stat-log.log |awk '/\$Proxy9/ {if($10>100) print $0}' cat stat-log.log |awk '/\$Proxy9/ {if(substr($6,12,4)>9566) print $0}' awk '{print $6}' traceIds.log |uniq -c 排查重复 zcat track-2019-05-29-1.log.gz |awk -F '"startTime":' '{split($2,a,",");if(a[1]>1559121300000 && a[1]<1559121600000) print $0 }' |wc -l NR 当前行号,$NF结尾字段
4、curl
curl https://www.example.com 直接get请求 curl -b 'foo1=bar;foo2=bar2' https://google.com 添加cookie(-b) curl -b cookies.txt https://www.google.com 添加cookie,也可以本地文件 curl -d 'login=emma&password=123' -X POST https://google.com/login post请求(包含-d 会默认post请求,所以可以删除-x post) curl -d '@data.txt' https://google.com/login post请求,本地获取参数 curl -F 'file=@photo.png;type=image/png' https://google.com/profile 上传二进制文件(包含-F 会默认 Content-Type: multipart/form-data) curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login 指定header(-H) curl -k https://www.example.com 不会检查服务器的 SSL 证书是否正确 curl -L -d 'tweet=hi' https://api.twitter.com/tweet 让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。 curl -O https://www.example.com/foo/bar.html 将服务器回应保存成文件,文件名为bar.html curl -u 'bob:12345' https://google.com/login 设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1。 curl -v https://www.example.com 输出通信的整个过程,用于调试 curl -v -XPOST --data-binary @cpu.info http://101.11.xxx.xxx:9091/metrics/job/pushgateway 请求中的数据为纯二进制数据,value如果是@file_name,则保留文件中的回车符和换行符,不做任何转换 curl --location --request POST 'http://mediates/queryCode'--header 'Content-Type: application/json' --data '{"body": {"aaa": "avule"}}'
5、sort排序
sort -n e3.txt // 对e3进行排序,正序(默认),按数字排序,无数字即为0(从头开始取,直到非数字结束) sort -nr e3.txt // 对e3进行排序,倒序,按数字排序,无数字即为0(从头开始取,直到非数字结束) sort -nr -k 2 e3.txt // 对e3进行排序,倒序 , 取第2个字段(默认空格为分隔符),按数字排序 sort -nr -t ',' -k 2 e3.txt // 对e3进行排序,倒序 , 取第2个字段, 以逗号为分隔符,按数字排序 sort -nr -t ',' -k -b 2 e3.txt // 对e3进行排序,倒序 , 取第2个字段, 以逗号为分隔符,按数字排序,忽略开头空
6、 wc统计
head -n 100 e3.txt // 查看前100行 tail -100f e3.txt // 查看尾100行 wc -l e3.txt // 就是查看文件里有多少行 wc -w e3.txt // 就是查看文件里有多少词,空格为分隔符(hello word 为两个词) wc -L e3.txt // 文件里最长的那一行是多少个字 wc -c e3.txt // 就是查看文件里有多少字 wc e3.txt // 默认统计 -lwc 行数、词、字
7、 文件格式转换
查看文件编码格式:file static1.c 修改文件编码:iconv -f gbk -t utf-8 static1.c -o static1.c [描述] -f encoding :把字符从encoding编码开始转换。 -t encoding :把字符转换到encoding编码。 -l :列出已知的编码字符集合 -o file :指定输出文件 -c :忽略输出的非法字符 -s :禁止警告信息,但不是错误信息 --verbose :显示进度信息 -f和-t所能指定的合法字符在-l选项的命令里面都列出来了。
还可以:
vi static1.c
:set fileencoding=utf-8
命令来设置文件的编码格式