花茶网站模板,潍坊网站定制公司,wordpress 分类目录描述显示,南京网站开发四、按列抽取与合并cutcut是一个选取命令#xff0c;就是将一段数据经过分析#xff0c;取出我们想要的。一般来说#xff0c;选取信息通常是针对“行”来进行分析的#xff0c;并不是整篇信息分析的。1、命令格式#xff1a;cut [-bn] [file] 或 cut [-c] [file] 或 cut …四、按列抽取与合并cutcut是一个选取命令就是将一段数据经过分析取出我们想要的。一般来说选取信息通常是针对“行”来进行分析的并不是整篇信息分析的。1、命令格式cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]2.使用说明cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 如果不指定 File 参数cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。3主要参数b 以字节为单位进行分割。这些字节位置将忽略多字节字符边界除非也指定了 -n 标志。-c 以字符为单位进行分割。-d 自定义分隔符默认为制表符。-f 与-d一起使用指定显示哪个区域。#: 第#个字段#,#[,#]离散的多个字段例如1,3,6#-#连续的多个字段, 例如1-6混合使用 1-3,7-n 取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内该字符将被写出否则该字符将被排除。4.cut定位方法cut命令主要是接受三个定位方法第一字节(bytes)用选项-b第二字符(characters)用选项-c第三域(fields)用选项-f与-d结合使用实例一以字节定位[rootbash ~]# ll re-rw-r--r-- 1 root root 57 Jan 3 22:36 re[rootbash ~]# cat reone apple a day!two apple two day!treefourfivesix[rootbash ~]# cut -b 1,2,5-7 reonapptwapptrfofisi实例二以字符定位[rootbash ~]# ll re-rw-r--r-- 1 root root 57 Jan 3 22:36 re[rootbash ~]# cat reone apple a day!two apple two day!treefourfivesix[rootbash ~]# cut -c 1,3,6-8 reoeppltoppltefufv实例三以域定位[rootbash ~]# head -n3 /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin[rootbash ~]# head -n3 /etc/passwd | cut -d: -f 1,3,5-7root:0:root:/root:/bin/bashbin:1:bin:/bin:/sbin/nologindaemon:2:daemon:/sbin:/sbin/nologinpastepaste单词意思是粘贴。该命令主要用来将多个文件的内容合并与cut命令完成的功能刚好相反。粘贴两个不同来源的数据时首先需将其分类并确保两个文件行数相同。paste将按行将不同文件行信息放在一行。缺省情况下 paste连接时用空格或tab键分隔新行中不同文本除非指定-d选项它将成为域分隔符。1.命令格式paste [OPTION]... [FILE]...2、常用选项-d: 指定两个文件的行合并后的分割符-s: 将每个文件合并为一行而不是按行进行合并3、常见用法paste file1 file2 #将两个文件的每行合并paste -d: file1 file2 #将两个文件的每行合并分隔符为:paste -s file1 file2 #将file1的内容合并为一行将file2的内容合并为一行实例[rootbash ~]# cat aaabbccddee[rootbash ~]# cat bxxhhcczzll[rootbash ~]# paste a baa xxhhbb cccc zzdd llee[rootbash ~]# paste -d: a b #使用冒号作为分隔符aa:xx:hhbb:cccc:zzdd:llee:[rootbash ~]# paste -s a b #a文件合并一行b文件合并一行aa bb cc dd eexx hh cc zz lljoinjoin将两个文件中指定栏位内容相同的行连接起来。1.命令格式join [-i][-a1或2][-e][-o] [-t][-v1或2][-1][-2][--help] [--version][文件1][文件2]2.命令参数-a1或2 除了显示原来的输出内容之外还显示指令文件中没有相同栏位的行。-i或--igore-case 比较栏位内容时忽略大小写的差异。-o 按照指定的格式来显示结果。-t 使用栏位的分隔字符。-1 连接[文件1]指定的栏位。-2 连接[文件2]指定的栏位。3.命令说明:默认连接是每个文件的第一个字段。指定输出字段 -o ... 其中FILENO1表示第一个文件FILENO2表示第二个文件FIELDNO表示字段序号从1开始编号。默认会全部输出但关键字列只输出一次。 比如-o 1.1 1.2 2.2 表示输出第一个文件的第一个字段、第二个字段第二个文件的第二个字段。使用示例示例一 内连接(忽略不匹配的行)不指定任何参数的情况下使用join命令就相当于数据库中的内连接关键字不匹配的行不会输出。[rootrhel55 linux]# cat month_cn.txt1 一月2 二月3 三月4 四月5 五月6 六月7 七月8 八月9 九月10 十月11 十一月12 十二月13 十三月故意的[rootrhel55 linux]# cat month_en.txt1 January2 February3 March4 April5 May6 June7 July8 August9 September10 October11 November12 December14 MonthUnknown注注意两个文件的内容中文版的多了十三月英文版的多了14月这纯粹是为了方便演示。[rootrhel55 linux]# join month_cn.txt month_en.txt1 一月 January2 二月 February3 三月 March4 四月 April5 五月 May6 六月 June7 七月 July8 八月 August9 九月 September10 十月 October11 十一月 November12 十二月 December[rootrhel55 linux]#示例二 左连接(又称左外连接显示左边所有记录)显示左边文件中的所有记录右边文件中没有匹配的显示空白。[rootrhel55 linux]# join -a1 month_cn.txt month_en.txt1 一月 January2 二月 February3 三月 March4 四月 April5 五月 May6 六月 June7 七月 July8 八月 August9 九月 September10 十月 October11 十一月 November12 十二月 December13 十三月[rootrhel55 linux]#示例三 右连接(又称右外连接显示右边所有记录)显示右边文件中的所有记录左边文件中没有匹配的显示空白。[rootrhel55 linux]# join -a2 month_cn.txt month_en.txt1 一月 January2 二月 February3 三月 March4 四月 April5 五月 May6 六月 June7 七月 July8 八月 August9 九月 September10 十月 October11 十一月 November12 十二月 December14 MonthUnknown[rootrhel55 linux]#**示例四 全连接(又称全外连接显示左边和右边所有记录)**[rootrhel55 linux]# join -a1 -a2 month_cn.txt month_en.txt1 一月 January2 二月 February3 三月 March4 四月 April5 五月 May6 六月 June7 七月 July8 八月 August9 九月 September10 十月 October11 十一月 November12 十二月 December13 十三月14 MonthUnknown[rootrhel55 linux]#示例五 指定输出字段比如参数 -o 1.1 表示只输出第一个文件的第一个字段。[rootrhel55 linux]# join -o 1.1 month_cn.txt month_en.txt123456789101112[rootrhel55 linux]# join -o 1.1 2.2 month_cn.txt month_en.txt1 January2 February3 March4 April5 May6 June7 July8 August9 September10 October11 November12 December[rootrhel55 linux]# join -o 1.1 2.2 1.2 month_cn.txt month_en.txt1 January 一月2 February 二月3 March 三月4 April 四月5 May 五月6 June 六月7 July 七月8 August 八月9 September 九月10 October 十月11 November 十一月12 December 十二月[rootrhel55 linux]# join -o 1.1 2.2 1.2 1.3 month_cn.txt month_en.txt 字段1.3并不存在1 January 一月2 February 二月3 March 三月4 April 四月5 May 五月6 June 六月7 July 七月8 August 八月9 September 九月10 October 十月11 November 十一月12 December 十二月[rootrhel55 linux]#示例六我们知道 /etc/passwd 第四个字段是 GID那个 GID 记录在 /etc/group 当中的第三个字段请问如何将两个文件整合[rootwww ~]# head -n 3 /etc/passwd /etc/group /etc/passwd root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin /etc/group root:x:0:rootbin:x:1:root,bin,daemondaemon:x:2:root,bin,daemon# 从上面可以看到确实有相同的部分喔赶紧来整合一下[rootwww ~]# join -t : -1 4 /etc/passwd -2 3 /etc/group0:root:x:0:root:/root:/bin/bash:root:x:root1:bin:x:1:bin:/bin:/sbin/nologin:bin:x:root,bin,daemon2:daemon:x:2:daemon:/sbin:/sbin/nologin:daemon:x:root,bin,daemon# 同样的相同的字段部分被移动到最前面了所以第二个文件的内容就没再显示。五、文本分析wcLinux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数并将统计结果显示输出。1命令格式wc [选项]文件...2命令功能统计指定文件中的字节数、字数、行数并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名则从标准输入读取。wc同时也给出所指定文件的总统计数。3命令参数-c 统计字节数。-l 统计行数。-m 统计字符数。这个标志不能与 -c 标志一起使用。-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。-L 打印最长行的长度。-help 显示帮助信息--version 显示版本信息4使用实例实例1查看文件的字节数、字数、行数命令wc test.txt输出[rootlocalhost test]# cat test.txthnlinuxpeida.cnblogs.comubuntuubuntu linuxredhatRedhatlinuxmint[rootlocalhost test]# wc test.txt7 8 70 test.txt[rootlocalhost test]# wc -l test.txt7 test.txt[rootlocalhost test]# wc -c test.txt70 test.txt[rootlocalhost test]# wc -w test.txt8 test.txt[rootlocalhost test]# wc -m test.txt70 test.txt[rootlocalhost test]# wc -L test.txt17 test.txt说明7 8 70 test.txt行数 单词数 字节数 文件名实例2用wc命令怎么做到只打印统计数字不打印文件名[rootlocalhost test]# wc -l test.txt7 test.txt[rootlocalhost test]# cat test.txt |wc -l7说明使用管道线这在编写shell脚本时特别有用。实例3用来统计当前目录下的文件数命令ls -l | wc -l输出[rootlocalhost test]# cd test6[rootlocalhost test6]# ll总计 604---xr--r-- 1 root mail 302108 11-30 08:39 linklog.log---xr--r-- 1 mail users 302108 11-30 08:39 log2012.log-rw-r--r-- 1 mail users 61 11-30 08:39 log2013.log-rw-r--r-- 1 root mail 0 11-30 08:39 log2014.log-rw-r--r-- 1 root mail 0 11-30 08:39 log2015.log-rw-r--r-- 1 root mail 0 11-30 08:39 log2016.log-rw-r--r-- 1 root mail 0 11-30 08:39 log2017.log[rootlocalhost test6]# ls -l | wc -l8[rootlocalhost test6]#说明数量中包含当前目录sortsort将文件的每一行作为一个单位相互比较比较原则是从首字符向后依次按ASCII码值进行比较最后将他们按升序输出。1.命令格式sort [-fbMnrtuk] [file or stdin]2.主要参数-f 忽略大小写的差异例如 A 与 a 视为编码相同-b 忽略最前面的空格符部分-M 以月份的名字来排序例如 JAN, DEC 等等的排序方法-n 使用『纯数字』进行排序(默认是以文字型态来排序的)-r 反向排序-u 就是 uniq 相同的数据中仅出现一行代表-t 分隔符默认是用 [tab] 键来分隔-k 以那个区间 (field) 来进行排序的意思实例一对/etc/passwd 的账号进行排序[rootwww ~]# cat /etc/passwd | sortadm:x:3:4:adm:/var/adm:/sbin/nologinapache:x:48:48:Apache:/var/www:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinsort 是默认以第一个数据来排序而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。实例二/etc/passwd 内容是以 : 来分隔的以第三栏来排序[rootwww ~]# cat /etc/passwd | sort -t : -k 3root:x:0:0:root:/root:/bin/bashuucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinbin:x:1:1:bin:/bin:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologin实例三默认是以字符串来排序的如果想要使用数字排序[rootwww ~]#cat /etc/passwd | sort -t : -k 3nroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/sh实例四:默认是升序排序如果要倒序排序[rootwww ~]#cat /etc/passwd | sort -t : -k 3nrnobody:x:65534:65534:nobody:/nonexistent:/bin/shntp:x:106:113::/home/ntp:/bin/falsemessagebus:x:105:109::/var/run/dbus:/bin/falsesshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin实例五如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序再基于第一个域进行反向排序。[rootwww ~]#cat /etc/passwd | sort -t: -k 6.2,6.4 -k 1rsync:x:4:65534:sync:/bin:/bin/syncproxy:x:13:13:proxy:/bin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/sh实例六查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序然后去重:[rootwww ~]#cat /etc/passwd | sort -t: -k 7 -uroot:x:0:0:root:/root:/bin/bashsyslog:x:101:102::/home/syslog:/bin/falsedaemon:x:1:1:daemon:/usr/sbin:/bin/shsync:x:4:65534:sync:/bin:/bin/syncsshd:x:104:65534::/var/run/sshd:/usr/sbin/nologinuniquniq命令可以去除排序过的文件中的重复行因此uniq经常和sort合用。也就是说为了使uniq起作用所有的重复行必须是相邻的。1.命令格式uniq [-idcu]2.常用参数-i忽略大小写字符的不同-c显示每行重复的次数-u只显示唯一的行-d仅显示重复过的行实例a.直接删除未经排序的文件将会发现没有任何行被删除[rootwww ~]#cat testfilehelloworldfriendhelloworldhello[rootwww ~]##uniq testfilehelloworldfriendhelloworldhellob.排序文件默认是去重[rootwww ~]##cat words | sort |uniqfriendhelloworldc.排序之后删除了重复行同时在行首位置输出该行重复的次数[rootwww ~]##sort testfile | uniq -c1 friend3 hello2 worldd.仅显示存在重复的行并在行首显示该行重复的次数[rootwww ~]##sort testfile | uniq -dc3 hello2 worlde.仅显示不重复的行[rootwww ~]#sort testfile | uniq -ufrienddiffdiff 命令是 linux上非常重要的工具用于比较文件的内容特别是比较两个版本不同的文件以找到改动的地方。1命令格式diff[参数][文件1或目录1][文件2或目录2]2命令功能diff命令能比较单个文件或者目录内容。如果指定比较的是文件则只有当输入为文本文件时才有效。以逐行的方式比较文本文件的异同处。如果指定比较的是目录的的时候diff 命令会比较两个目录下名字相同的文本文件。列出不同的二进制文件、公共子目录和只在一个目录出现的文件。3命令参数-c 显示全部内文并标出不同之处。-u,-U或--unified 以合并的方式来显示文件内容的不同。-i忽略大小写-b(--ignore-space-change)忽略空格的变化-B(--ignore-blank-lines)比较时忽略空白行-a将比较的文件都当成纯文本文件处理-r递归比较子目录(如diff -r /etc/rc.d/rc3.d/ /etc/rc.d/rc5.d/比较两个不同开机运行级别的目录)-N或--new-file 在比较目录时若文件A仅出现在某个目录中预设会显示Only in目录文件A若使用-N参数则diff会将文件A与一个空白的文件比较。-w或--ignore-all-space 忽略全部的空格字符。-W或--width 在使用-y参数时指定栏宽。-y或--side-by-side 以并列的方式显示文件的异同之处。4.diff说明正常格式(normal diff)上下文格式(context diff)合并格式(unified diff)a、示例文件为了便于讲解先新建两个示例文件。第一个文件叫做f1内容是每行一个a一共7行。aaaaaaa第二个文件叫做f2修改f1而成第4行变成b其他不变。aaabaaab、正常格式的diff现在对f1和f2进行比较$ diff f1 f2这时diff就会显示正常格式的结果4c4--- b第一行是一个提示用来说明变动位置。4c4它分成三个部分前面的4表示f1的第4行有变化中间的c表示变动的模式是内容改变(change)其他模式还有增加(a代表addition)和删除(d代表deletion)后面的4表示变动后变成f2的第4行。第二行分成两个部分。前面的小于号表示要从f1当中去除该行(也就是第4行)后面的a表示该行的内容。第三行用来分割f1和f2。---第四行类似于第二行。 b前面的大于号表示f2增加了该行后面的b表示该行的内容。最早的Unix(即ATT版本的Unix)使用的就是这种格式的diff。c、上下文格式的diff上个世纪80年代初加州大学伯克利分校推出BSD版本的Unix时觉得diff的显示结果太简单最好加入上下文便于了解发生的变动。因此推出了上下文格式的diff。它的使用方法是加入c参数(代表context)。$ diff -c f1 f2显示结果如下*** f1 2012-08-29 16:45:41.000000000 0800--- f2 2012-08-29 16:45:51.000000000 0800****************** 1,7 ****aaa!aaaa--- 1,7 ----aaa!baaa这个结果分成四个部分。第一部分的两行显示两个文件的基本情况文件名和时间信息。*** f1 2012-08-29 16:45:41.000000000 0800--- f2 2012-08-29 16:45:51.000000000 0800***表示变动前的文件---表示变动后的文件。第二部分是15个星号将文件的基本情况与变动内容分割开。***************第三部分显示变动前的文件即f1。*** 1,7 ****aaa!aaaa这时不仅显示发生变化的第4行还显示第4行的前面三行和后面三行因此一共显示7行。所以前面的*** 1,7 ****就表示从第1行开始连续7行。另外文件内容的每一行最前面还有一个标记位。如果为空表示该行无变化如果是感叹号(!)表示该行有改动如果是减号(-)表示该行被删除如果是加号()表示该行为新增。第四部分显示变动后的文件即f2。--- 1,7 ----aaa!baaa除了变动行(第4行)以外也是上下文各显示三行总共显示7行。d、合并格式的diff如果两个文件相似度很高那么上下文格式的diff将显示大量重复的内容很浪费空间。1990年GNU diff率先推出了合并格式的diff将f1和f2的上下文合并在一起显示。它的使用方法是加入u参数(代表unified)。$ diff -u f1 f2显示结果如下--- f1 2012-08-29 16:45:41.000000000 0800 f2 2012-08-29 16:45:51.000000000 0800 -1,7 1,7 aaa-abaaa它的第一部分也是文件的基本信息。--- f1 2012-08-29 16:45:41.000000000 0800 f2 2012-08-29 16:45:51.000000000 0800---表示变动前的文件表示变动后的文件。第二部分变动的位置用两个作为起首和结束。 -1,7 1,7 前面的-1,7分成三个部分减号表示第一个文件(即f1)1表示第1行7表示连续7行。合在一起就表示下面是第一个文件从第1行开始的连续7行。同样的1,7表示变动后成为第二个文件从第1行开始的连续7行。第三部分是变动的具体内容。aaa-abaaa除了有变动的那些行以外也是上下文各显示3行。它将两个文件的上下文合并显示在一起所以叫做合并格式。每一行最前面的标志位空表示无变动减号表示第一个文件删除的行加号表示第二个文件新增的行。patch实例diff输出补丁文件patch给旧文件打补丁[rootbash ~]# cat f1Hi,Hello,How are you?I am fine,Thank you.[rootbash ~]# cat f2Hello,Hi,How are you?I am fine.[rootbash ~]# diff -u f1 f2 diff.patch #输出不定文件[rootbash ~]# patch -b f1 diff.patch #patch给f1打补丁并且备份原来文件patching file f1[rootbash ~]# cat f1Hello,Hi,How are you?I am fine.六、文本字符转换trtr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串字符串1用于查询字符串2用于处理各种转换。tr刚执行时字符串1中的字符被映射到字符串2中的字符然后转换操作开始。1.命令格式tr -c|-d|-s [string1_to_translate_from] [string2_to_translate_to] 2.命令选项-c 用字符串1中字符集的补集替换此字符集要求字符集为ASCII。-d 删除字符串1中所有输入字符。-s 删除所有重复出现字符序列只保留第一个即将重复出现字符串压缩为一个字符串。-t或--truncate-set1将第一个字符集对应字符转化为第二字符集对应的字符3.命令说明指定字符串1或字符串2的内容时只能使用单字符或字符串范围或列表。[a-z] a-z内的字符组成的字符串。[A-Z] A-Z内的字符组成的字符串。[0-9] 数字串。\octal 一个三位的八进制数对应有效的ASCII字符。[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。实例一将文件host中出现的abc替换为xyz[rootlocalhost ~]# cat host:a b c replace e f g replace this is a test page replace[rootlocalhost ~]# cat host|tr abc xyz:x y z replxze e f g replxze this is x test pxge replxze【注意】这里凡是在host中出现的a字母都替换成x字母b字母替换为y字母c字母替换为z字母。而不是将字符串abc替换为字符串xyz。实例二使用tr命令“统一”字母大小写(小写 -- 大写)[rootlocalhost ~]# cat host | tr [a-z] [A-Z]:A B C REPLACE E F G REPLACE THIS IS A TEST PAGE REPLACE(大写 -- 小写)[rootlocalhost ~]# cat host | tr [A-Z] [a-z]实例二把f1中0到9转换为a到j[rootlocalhost ~]# cat f1A b c De F G H 9 0 8 7 63h b mfd dgg[rootlocalhost ~]# cat f1|tr [0-9] [a-j]A b c De F G H j a i h gdh b mfd dgg实例三删除文件host中出现的replace字符[rootlocalhost ~]# cat host:a b c replace e f g replace this is a test page replace[rootlocalhost ~]# cat host|tr -d replace: b f g this is tst g【注意】这里凡是在host文件中出现的r,p,l,a,c,e字符都会被删除而不是紧紧删除出现的replace”字符串。删除文件file中出现的换行\n、制表\t字符[rootlocalhost ~]# cat file | tr -d \n\t new_file不可见字符都得用转义字符来表示的这个都是统一的。实例四删除“连续着的”重复字母只保留第一个[rootlocalhost ~]# cat file | tr -s [a-zA-Z] new_file实例五删除空行[rootlocalhost ~]# cat file | tr -s \n new_file实例六删除Windows文件“造成”的^M字符[rootlocalhost ~]# cat file | tr -d \r new_file或者[rootlocalhost ~]# cat file | tr -s \r \n new_file【注意】这里-s后面是两个参数\r和\n用后者替换前者实例七用空格符\040替换制表符\011[rootlocalhost ~]# cat file | tr -s \011 \040 new_file实例八把路径变量中的冒号:替换成换行符\n[rootlocalhost ~]# echo $PATH | tr -s : \n/usr/local/sbin/usr/local/bin/sbin/bin/usr/sbin/usr/bin/root/bin实例九删除f1中除了数字换行之外的所有字符[rootlocalhost ~]# cat f1一月 1二月 2三月 3四月 4五月 5六月 6七月 7八月 8九月 9十月 10十一月 11十二月 12十三月 13[rootlocalhost ~]# tr -cd [0-9]\n 12345678910111213实例十利用ifconfig去ipv4地址[rootlocalhost ~]# ifconfig|tr -cs [0-9]. \n|sort -ut . -k3n127.0.0.1192.168.1.255192.168.1.8255.255.255.0实例十一查出/tmp的权限用数字表示[rootlocalhost ~]# stat /tmp | tail -4|head -1|tr -s :|cut -d: -f2|tr -dc [0-9]\n1777实例十二统计/etc/init.d/functions中每个单词重复的个数[rootlocalhost ~]# cat /etc/init.d/functions |tr -sc [:alpha:] \n|sort|uniq -c|sort -n