核心知识
筛选
快捷键
命令执行
!! #执行上一条命令
!num #执行历史命令的第num行命令
Ctrl+r 关键字 #执行内容匹配的命令
命令行切换
Ctrl + A #光标回到行首
Ctrl + E #光标回到行尾
Esc + b #移动到当前单词的开头
Esc + f #移动到当前单词的结尾
Ctrl + k #删除光标到行尾的内容
Ctrl + u #删除光标到行首的内容
Ctrl + y #粘贴删除的内容
Ctrl + c #临时终止命令行命令
grep
负责从数据源中搜索对应的字符串,行过滤
参数
-i #不区分大小写
-v #反向选择,即查找不包含对应字符串的行
-w #按单词搜索
-o #打印匹配关键词
-c #统计匹配到的次数
-n #显示行号
-r #逐层遍历目录查找
-A #显示匹配行及后面多少行
-B #显示匹配行及前面多少行
-C #显示匹配行前后多少行
-l #只列出匹配的文件名
-L #列出不匹配的文件名
-e #使用正则表达式
-E #使用扩张正则表达式
grep搜索结果高亮原因为参数
--color = “auto”
,在/etc/profile.d/colorgrep.csh
中可以看到,grep默认带了--color = “auto”
# color-grep initialization /usr/libexec/grepconf.sh -c if ( $status == 1 ) then exit endif alias grep 'grep --color=auto' alias egrep 'egrep --color=auto' alias fgrep 'fgrep --color=auto'
sort排序
语法:
sort 参数 文件
将文件内的每一行作为一个单位,从首字符向后依次按ASCII码进行升序排序
参数
-u #去除重复行
-r #降序排列,默认是升序
-o #将排序结果输出到文件中 类似>
-n #按数字排列,默认为字符排列
-t #分隔符
-k #第n行
-b #忽略前导空格
-R #随机排列输出结果
处理信息
cut命令
数据截取
参数
-f #显示指定的列
-d #分隔符
-c #只选中指定的字符
示例
原始的cut.txt
文件内容为shutdown:6:0:shutdown:/sbin:/sbin/shutdown
cut -f1 -d ":" cut.txt #结果为 shutdown
cut -c2 cut.txt #结果为 h
cut -c6-12 cut.txt #结果为 own:6:0
tr命令
字符转换、替换、删除
语法
tr 参数 被替换内容 替换内容
命令输出作为tr输入
commands | tr "被替换内容" "替换内容"
文件中的内容输出作为tr输入
tr "被替换内容" "替换内容" < 文件名
文件中的内容输出作为tr输入(需要使用选项参数时使用)
tr -选项参数 "被替换内容" < 文件名
参数
-s #将多个连续意一样的字符转换为一个字符
-d #删除匹配的内容
示例
原始的tr.txt
文件内容为shutdown:6:0:shutdown:/sbin:/sbin/shutdown
tr [0-9] # < tr.txt #将数字转换为#,结果为 shutdown:#:#:shutdown:/sbin:/sbin/shutdown
tr [a-z] [A-Z] < tr.txt #小写字母转换为大写字母,结果为 SHUTDOWN:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN
获取ip地址,使用ifconfig获取到的内容如下,我们希望获取到eth0网卡的ip,即192.168.0.144
这个地址
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.144 netmask 255.255.240.0 broadcast 192.168.15.255
inet6 fe80::f816:3eff:fe64:bc4c prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:64:bc:4c txqueuelen 1000 (Ethernet)
RX packets 5181497 bytes 1211949906 (1.1 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4478489 bytes 884948167 (843.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 5809 bytes 6305561 (6.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5809 bytes 6305561 (6.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d " "
grep -w "inet"
这个获取到包含目标ip地址的一行
tr -s " "
由于上一步获取到一行中存在多个连续的空格,将其转化为一个空格便于下一步的截取数据
cut -f3 -d " "
以空格为分隔符获取第三行内容(第二步以后,行首有一个空格,即第一列为空,inet为第二列,ip地址为第三列)
uniq命令
连续信息去重
uniq 命令默认只会去除相邻的重复行。如果你的重复单词在文件中不是连续的,uniq 不能正确去重。
参数
-c #统计重复行数
-d #只显示重复行
-i #忽略大小写
示例
原始uniq.txt文件内容如下
Apple
Banana
apple
CHERRY
CHERRY
banana
GRAPE
grape
orange
ORANGE
apple
Banana
uniq uniq.txt
#####运行结果#####
Apple
Banana
apple
CHERRY
banana
GRAPE
grape
orange
ORANGE
apple
Banana
uniq -c uniq.txt
#####运行结果#####
1 Apple
1 Banana
1 apple
2 CHERRY
1 banana
1 GRAPE
1 grape
1 orange
1 ORANGE
1 apple
1 Banana
uniq -ci uniq.txt
#####运行结果#####
1 Apple
1 Banana
1 apple
2 CHERRY
1 banana
2 GRAPE
2 orange
1 apple
1 Banana
1 GRAPE
1 cherry
2 orange
1 cherry
1 banana
1 Apple
1 grape
uniq -d iniq.txt
#####运行结果#####
CHERRY
组合信息
paste命令
合并文件行内容并输出,不会改动源文件
参数
-s #每个文件中的行内容输出在相应的一行
-d #输出列表,并可制定分隔符,默认为制表符
示例
paste1.txt文件内容如下
Hello
123
abc
paste2.txt文件内容如下
world
456
abc
ABC
paste paste1.txt paste2.txt 合并内容
#####运行结果#####
Hello world
123 456
abc abc
ABC
paste -d "#" paste1.txt paste2.txt 合并内容并自定义分隔符为“#”
#####运行结果#####
Hello#world
123#456
abc#abc
#ABC
paste -s paste1.txt paste2.txt
#####运行结果#####
Hello 123 abc
world 456 abc ABC
🧐Xargs命令
将管道或标准输出数据转换成命令行参数,也可以从文件的输出中读取数据
语法
commands | xargs -参数 command
参数
-a 文件名 #从文件中读取数据
-E 分隔符 #读取时以分隔符为结束标志(新版已废弃,用-d代替)
-p #每次读取时需要用户确认
-n #一次性展示数据的个数
-t #先打印命令再执行命令
-I #将xargs接收到的每项名称,逐行赋值给{},可以用{}代替。{} 只是常用占位符,默认可自定义
-d #列分隔符,默认为换行
示例
num.txt
内容如下
1
2
3
4
5
6
7
8
9
使用xargs提取文件中的数据
xagrs -a num.txt
#####运行结果#####
1 2 3 4 5 6 7 8 9
使用xagrs 读取文件数据5之前的内容
xagrs -a num.txt -E 5
#####运行结果#####
1 2 3 4
如果加入-p则会在输出前要求用户确认,用户输入y
则正常输出,输入n
则取消输出
xargs -a num.txt -E 5 -p
#####运行结果#####
echo 1 2 3 4?...y
1 2 3 4
————————————————————
xargs -a num.txt -E 5 -p
#####运行结果#####
echo 1 2 3 4?...n
使用-d时则可以以指定的分隔符分割,例如
echo "sunisunisuniappleidayi12" | xargs -d "i"
#####运行结果#####
sun sun sun apple day 12
-I 非常重要,常见的用途有批量备份
使用-I
实现多文件的备份,比如我们有如下文件需要备份到/tmp/logbak
目录下,并为将备份后的文件加上.bak
后缀
access.log auth.log database.log error.log server.log
app.log cron.log debug.log kernel.log system.log
ls *.log | xargs -I {} cp {} /tmp/logbak/{}.bak
#####运行结果#####
ls /tmp/logbak/
access.log.bak auth.log.bak database.log.bak error.log.bak server.log.bak
app.log.bak cron.log.bak debug.log.bak kernel.log.bak system.log.bak