核心知识

筛选

快捷键

  1. 命令执行

!!						#执行上一条命令
!num					#执行历史命令的第num行命令
Ctrl+r   关键字			#执行内容匹配的命令
  1. 命令行切换

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 参数 被替换内容 替换内容

  1. 命令输出作为tr输入

commands | tr "被替换内容" "替换内容"
  1. 文件中的内容输出作为tr输入

tr "被替换内容" "替换内容" < 文件名
  1. 文件中的内容输出作为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