背景:
操作系统 MacOS。 工作初期会使用一些sumbline之类的文本工具来搜索,虽然也快,但是总觉得不高级。哈哈哈....
所以查了下资料,觉得linux中的一些指令还是蛮给力的。不仅可以提高效率,还可以写进shell脚本中。 所以整理一下,好记性不如烂笔头嘛。后面可以直接拿来用啦。
linux 常用指令
grep 指令 可以实现or,and,not的作用,这里只介绍一种,因为懒😝。下面例子or 和 and 中的pattern都是正则表达式哦,具体如下:
1.grep 实现or用法:
grep -E 'pattern1|pattern2' filename
2.grep 实现and用法:
grep -E 'pattern1.pattern2' filename 注解: 两个pattern1与pattern2 顺序是固定的
grep -E 'pattern1.pattern2|pattern2.*pattern1' filename 注解: 两个pattern1与pattern2 顺序是不固定的
3.grep 实现not 非的用法:
grep -v 'pattern1' filename 注解: -v 选项用来实现反选匹配的( invert match),可匹配得到除下指定pattern外的所有lines。
vim 编辑器
vim最常用到的有如下:
G->直接跳转到文件的最后一行
dd->删除光标当前行
10 dd -> 删除后面10行,这里的数字可以自定义
i->进入插入模式
x->删除光标处的字符
o-> 插入下一行
w-> 查看下一个word
b-> 查看上一个word
image.png
一、用/和?的区别:
/后跟查找的字符串。vim会显示文本中第一个出现的字符串。
?后跟查找的字符串。vim会显示文本中最后一个出现的字符串。
ping和telnet
ping命令是不能够测试端口的,ping只是测试网络联接状况以及信息包发送和接收状况。
格式:ping IP地址或主机名 [-t] [-a] [-n count] [-l size]
参数含义:-t不停地向目标主机发送数据;
-a 以IP地址格式来显示目标主机的网络地址 ;
-n count 指定要Ping多少次,具体次数由count来指定 ;
-l size 指定发送到目标主机的数据包的大小。
例子:ping 192.168.0.1 -t 不停的测试192.168.0.1,
按ctrl+c停止
测试端口使用telnet IP地址或主机名 端口,
使用tcp协议的例如telnet 192.168.0.1 80测试192.168.0.1的80端口
Linux jq命令
jq 是一个轻量级的json处理命. 可以用在shell脚本中。
JsonList举例:
cat .json.txt | jq .
[
{
"name": "zhangsan",
"age": 21,
"courses": [
"语文",
"数学",
"英语"
]
},
{
"name": "lisi",
"age": 22,
"courses": [
"物理",
"化学",
"生物"
]
}
]
JsonList获取zhangsan这个value的方法是:cat .json.txt | jq '.[0].name'
JsonObject举例
cat json.txt |jq '.'
{
"uuid": "1192751169468366850",
"deviceUuid": "1192751164410036225",
"serverVerify": "0",
"serverAddress": "127.0.0.1",
"ntpServerAddress": "127.0.0.1",
"otherServer": "true",
"otherServerAddress": "127.0.0.1",
"networkRelayAddress": "127.0.0.1"
}
获取JsonObject 获取uuid方法:cat .json.txt | jq '.uuid'
json重组
# 只输出name 和 age
cat ./json.txt | jq '[.[] | {name:.name, age:.age}]'
[
{
"name": "zhangsan",
"age": 21
},
{
"name": "lisi",
"age": 22
}
]
# 输出name和第一个course
cat ./json.txt | jq '[.[] | {name:.name, course:.courses[0]}]'
[
{
"name": "zhangsan",
"course": "语文"
},
{
"name": "lisi",
"course": "物理"
}
]
综上: jq中的 "." 代表的是all的内容。 后面的获取方法和Java中处理json 体是一个道理啦。
Linux -awk
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk语言的最基本功能,是在文件或者字符串中,基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。
通常,awk是以行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
举例
[root@www ~]# last -n 5 <==仅取出前五行
root pts/1 192.168.1.100 Tue Feb 10 11:21 still logged in
root pts/1 192.168.1.100 Tue Feb 10 00:46 - 02:28 (01:41)
root pts/1 192.168.1.100 Mon Feb 9 11:41 - 18:30 (06:48)
dmtsai pts/1 192.168.1.100 Mon Feb 9 11:41 - 11:41 (00:00)
root tty1 Fri Sep 5 14:09 - 14:10 (00:01)
[root@www ~]# last -n 5 | awk '{print $1}'
root
root
root
dmtsai
root
linux xargs
xargs 一般是和管道一起使用.
举例:
复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I {} cp {} /data/images
xargs 的一个选项 -I,使用 -I 指定一个替换字符串 {},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
-d 选项可以自定义一个定界符:
echo "nameXnameXnameXname" | xargs -dX
name name name name
网友评论