文本操作笔记
指令:VIm
qq:跳转到文件首部
shift + G:跳转到尾部
yy:拷贝当前行
dd:删除当前行
/:开始从前往后查
:?:从后往前查询指定关键字
指令 sort
sort -u:去除重复行
sort -r:结果降序排列(默认的排序方式是升序)
sort -o:结果重新输入到原文件
sort file.txt -o file.txt
指令 sed
行选择:sed -n
sed --n '2,4p' filename :选择文件的第2行到底4行
正则表达式替换:sed -i
//新字符串替换原字符串,替换一次
sed -i 's/原字符串/新字符串/' /home/1.txt
// +/g 标识替换所有直到末尾
sed -i 's/原字符串/新字符串/g' /home/1.txt
其他应用方式:
//去掉行首带的“@”
sed -i 's/^@//' file
//特定字符串的行前插入新行
sed -i '/特定字符串/i 新行字符串' file
//特定字符串的行后插入新行
sed -i '/特定字符串/a 新行字符串' file
//特定字符串的删除
sed -i '/字符串/d' file
参见:https://www.cnblogs.com/ev-zhk/p/4277023.html
指令awk
列选择:
- 打印文件的第一列(域) : awk '{print $1}' filename
- 打印文件的前两列(域) : awk '{print $1,$2}' filename
- 打印完第一列,然后打印第二列 : awk '{print $1 $2}' filename
- 打印文本文件的总行数 : awk 'END{print NR}' filename
- 打印文本第一行 :awk 'NR==1{print}' filename
- 打印文本第二行第一列 :sed -n "2, 1p" filename | awk 'print $1'
- 自定义列分隔符 :awk -F ':' '{print $1}' filename
指令cut:
位数选择
echo 12345678|cut -c 2-4 打印第2到4位的字符,结果为 234
其他指令:
curl
1.发送post请求,可以是json,html
curl -H 'content-type: application/json' -X POST -d '{"name":"shfbjsf"}' http://www.jnshu.com/aaa
2.get 请求
curl https://way.jd.com/he/freeweather?city=handan&appkey=8010132dcf54491a4eaa387f4db61774
指令组合
1.查找并删除某些进程:
ps -ef|grep rsync|grep -v grep|cut -c 9-15|xargs kill -9
#可以使用 awk '{print $2}' 替换cut
ps -ef|grep rsync|grep -v grep| awk '{print $2}'|xargs kill -9
管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的
命令说明:
"ps - ef"是linux 里查看所有进程的命令。这时检索出的进程将作为下一条命令"grep rsync"的输入。
"grep rsync"的输出结果是,所有含有关键字"rsync"的进程,这是rsync任务关键字。
"grep -v grep"是在列出的进程中去除含有关键字"grep"的进程。
"cut -c 9-15"是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
"xargs kill -9"中的xargs命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该令。
"kill -9"会强行杀掉指定进程,这样就成功清除了oracle的所有远程连接进程。其它类似的任务,只需要修改"grep php"中的关键字部分就可以了。
命令行多指令执行技巧
要实现在一行执行多条Linux命令,分三种情况:
1、&&
举例:
lpr /tmp/t2 && rm /tmp/t2
第2条命令只有在第1条命令成功执行之后才执行。当&&前的命令“lpr /tmp/t2”成功执行后"rm /tmp/t2"才执行,根据命令产生的退出码判断是否执行成功(0成功,非0失败)。
2、||
举例:
cp /tmp/t2 /tmp/t2.bak || rm /tmp/t2
只有||前的命令“cp /tmp/t2 /tmp/t2.bak”执行不成功(产生了一个非0的退出码)时,才执行后面的命令。
3、;
举例:
cp /tmp/t2 /tmp/t2.bak; echo "hello world"
顺序执行多条命令,当;号前的命令执行完(不管是否执行成功),才执行;后的命令。