cat:concatenate 文本文件查看工具
cat [option] filename...
-n:给显示出来的文本行加上编号
-b:非空行编号
-V:显示 ^
-E:显示行结束符$
-T:显示制表符
-A:显示所有控制符-A=-VET
-s:压缩连续的空行成一行
如:cat /etc/fstab /etc/passwd 同时查看多个文件
df | cut -d:
tac:文本文件查看工具
用法同cat 只是文件内容的行逆序显示
rec:文本文件查看工具
用法同cat 只是文本文件每一行的内容倒过来显示
head:查看文件的前几行(默认10行)
head [option] FILE
head -n #:指定查看行数,可简写为:-#
tail:查看文件的后几行(默认10行)
tail [option] FILE
tail -n #:指定查看行数,可简写为:-#
-f:查看文件尾部内容结束后不退出
跟随显示新增的行,监控日志文件增长时非常有用
tail -f -n0 test.txt & 后台运行日志文件监控
分屏查看命令:more,less
more:more file
特点:翻屏至文件尾部时自动退出
less:less file
man调用的就是less命令,用法同man一样
cut:剪辑命令——筛选显示文件内容
cut [OPTION]... [FILE]...
-d 指定分隔符(默认tab)
-f 指定显示字段
#: 第#个字段
m,n:第m段,第n段
m-n:第m段到第n段
混合使用:m-n,#
-c 按字符切割
--output-delimiter=STRING指定输出分隔符
如:cut -d:-f1,3,7 /etc/passwd
df | cut -c44-47 | sort -n | tail -2 | head -1
[root@centos7 test]# cut -d: -f1,3,7 /etc/passwd root:0:/bin/bash bin:1:/sbin/nologin daemon:2:/sbin/nologin adm:3:/sbin/nologin lp:4:/sbin/nologin sync:5:/bin/sync shutdown:6:/sbin/shutdown [root@centos7 test]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 5232640 3864220 1368420 74% / devtmpfs 486156 0 486156 0% /dev tmpfs 500680 84 500596 1% /dev/shm tmpfs 500680 7124 493556 2% /run tmpfs 500680 0 500680 0% /sys/fs/cgroup /dev/sda3 5029504 20568 4730408 1% /test /dev/sda1 201388 141700 59688 71% /boot tmpfs 100136 16 100120 1% /run/user/42 tmpfs 100136 0 100136 0% /run/user/0 /dev/sr0 7587292 7587292 0 100% /mnt [root@centos7 test]# df | cut -c44-47 | sort -n | tail -2 | head -1 74%
paste 合并两个文件同行号的列到一行后显示
paste [OPTION]... [FILE1] [FILE2]...
-d 分隔符:指定分隔符(默认用TAB)
-s : 先将文件各自所有的行合成一行后再把两个文件的内容合并显示
paste file1 file2 > file 产生真实合并效果
paste -s file1 file2
wc:world count文本统计命令
wc [option] file
-l:仅显示文本文件的行数
-w:仅显示文件文件的字数
-c:仅显示文本文件的字节数
-m:仅显示文本文件的字符数
sort:文件内容排序显示
sort [option] file
-n:以数值大小进行排序
-u:排序后去重
-f:忽略字符大小写
-r:逆序排列
-t:指定分隔符
-k:指定排序字段
如:sort -nt: -k3 /etc/passwd
uniq:显示文件中的重复行(完全相同切连续的行)
uniq [option] file
-d:只显示重复的行
-c:显示文件中行重复的次数
-u:仅显示不重复的行
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c
diff:比较两个文件之间的区别
diff [option] file1 file2
diff 命令的输出被保存在一种叫做“补丁”的文件中,使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件。
diff -u foo.conf-broken foo.conf-works > foo.patch
patch 命令复制在其它文件中进行的改变(要谨慎使用!)
使用-b 选项自动从补丁文件中抽取更新
patch -b foo.conf-broken foo.patch
[root@centos7 test]# paste net1.txt net2.txt PREFIX=16 PREFIX=24 GATEWAY=10.1.0.1 GATEWAY=10.1.0.1 DNS1=202.106.0.20 DNS1=202.106.0.20 IPV6_PEERDNS=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_PEERROUTES=yes IPV6_PRIVACY=no IPV6_PRIVACY=yes 255.255.255.255 255.255.255.255 0.0.0.0 1.1.1.1 test test test [root@centos7 test]# diff net1.txt net2.txt 1c1 < PREFIX=16 --- > PREFIX=24 6c6 < IPV6_PRIVACY=no --- > IPV6_PRIVACY=yes 8,9c8 < 0.0.0.0 < test test test --- > 1.1.1.1 [root@centos7 test]# diff -u net1.txt net2.txt > net.patch [root@centos7 test]# cat net.patch --- net1.txt 2016-08-06 11:38:47.403450018 +0800 +++ net2.txt 2016-08-06 11:38:47.413450019 +0800 @@ -1,9 +1,8 @@ -PREFIX=16 +PREFIX=24 GATEWAY=10.1.0.1 DNS1=202.106.0.20 IPV6_PEERDNS=yes IPV6_PEERROUTES=yes -IPV6_PRIVACY=no +IPV6_PRIVACY=yes 255.255.255.255 -0.0.0.0 -test test test +1.1.1.1 [root@centos7 test]# patch -b net1.txt net.patch patching file net1.txt [root@centos7 test]# paste net1.txt net2.txt PREFIX=24 PREFIX=24 GATEWAY=10.1.0.1 GATEWAY=10.1.0.1 DNS1=202.106.0.20 DNS1=202.106.0.20 IPV6_PEERDNS=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_PEERROUTES=yes IPV6_PRIVACY=yes IPV6_PRIVACY=yes 255.255.255.255 255.255.255.255 1.1.1.1 1.1.1.1
linux文本处理三剑客
grep:文本过滤工具
sed:stream editor,流编辑器
awk:Linux上的实现gawk,文本报告生成器
grep: Global search REgular expression and Print out the line
用途grep:根据模式搜索文本,并将符合模式的文本行显示出来
parttern(模式):文本字符和正则表达式的元字符组合而成的匹配条件
grep, egrep, fgrep(不支持正则表达式搜索)
grep [OPTIONS] PATTERN [FILE...]
--color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern匹配到的行;
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数
-o: 仅显示匹配到的字符串
-q: 静默模式,不输出任何信息
-A #:after, 显示匹配行之后相连的#行
-B #: before, 显示匹配行之前相连的#行
-C #:context, 显示匹配行前后各#行
-w:整行匹配整个单词
-E:使用扩展正则表达式 等同于egrep
-e:多个选项间的逻辑或关系
如:grep –e ‘cat ’ -e ‘dog’ file
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持:grep, vim, less,nginx等
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
正则表达式引擎:
采用不同算法,检查处理正则表达式的软件模块
PCRE(Perl Compatible Regular Expressions)
元字符分类:字符匹配、匹配次数、位置锚定、分组
字符匹配:使用时元字符外面需再套一个[]
. : 匹配任意单个字符;
[] : 匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[:digit:]所有数字
[:upper:]所有大写字母
[:lower:]所有小写字母
[:alpha:]所有大小写字母
[:alnum:]数字和大小写字母
[:punct:]标点符号
[:space:]空格
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
*:匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
\:转义符
.*:任意长度的任意字符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次 <=n
\{m,\}:匹配前面的字符至少m次 >=n
位置锚定:定位出现的位置
^:行首锚定,用于模式的最左侧
$:行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 \b:词首锚定,用于单词模式的左侧
\> 或 \b:词尾锚定;用于单词模式的右侧
\<PATTERN\>:匹配整个单词
分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
使用grep找出/etc/passwd中用户名和SHELL名称一样的行
[root@centos7 test]# grep "^\(\<[[:alnum:]]*\>\).*\1$" /etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
egrep及扩展正则表达式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
扩展正则表达式的元字符:
字符匹配:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符
次数匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
位置锚定:
^ :行首
$ :行尾
\<, \b :语首
\>, \b :语尾
分组:
()
后向引用:\1, \2,
或者:
a|b
C|cat: C或cat
(C|c)at:Cat或cat
使用egrep取网络配置文件中的IP地址的过程解析:
取四段中的第一段
[root@centos7 test]# egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>." /etc/sysconfig/network-scripts/ifcfg-eno16777728 IPADDR=10.1.254.254 GATEWAY=10.1.0.1 DNS1=202.106.0.20
取四段中的第二段
[root@centos7 test]# egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>.(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.)" /etc/sysconfig/network-scripts/ifcfg-eno16777728 IPADDR=10.1.254.254 GATEWAY=10.1.0.1 DNS1=202.106.0.20
取四段中的第三段
[root@centos7 test]# egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>.(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){2}" /etc/sysconfig/network-scripts/ifcfg-eno16777728 IPADDR=10.1.254.254 GATEWAY=10.1.0.1 DNS1=202.106.0.20
取四段中的第四段
[root@centos7 test]# egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>.(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){2}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>" /etc/sysconfig/network-scripts/ifcfg-eno16777728 IPADDR=10.1.254.254 GATEWAY=10.1.0.1 DNS1=202.106.0.20
只显示IP地址
[root@centos7 test]# egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>.(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){2}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>" /etc/sysconfig/network-scripts/ifcfg-eno16777728 10.1.254.254 10.1.0.1 202.106.0.20