linux删除第二列为空_Linux之基本文本处理工具(二)

四、按列抽取与合并cut

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。

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结合使用

实例一:以字节定位[root@bash ~]# ll re

-rw-r--r-- 1 root root 57 Jan  3 22:36 re

[root@bash ~]# cat re

one apple a day!

two apple two day!

tree

four

five

six

[root@bash ~]# cut -b 1,2,5-7 re

onapp

twapp

tr

fo

fi

si

实例二:以字符定位[root@bash ~]# ll re

-rw-r--r-- 1 root root 57 Jan  3 22:36 re

[root@bash ~]# cat re

one apple a day!

two apple two day!

tree

four

five

six

[root@bash ~]# cut -c 1,3,6-8 re

oeppl

toppl

te

fu

fv

实例三:以域定位[root@bash ~]# head -n3 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@bash ~]# head -n3 /etc/passwd | cut -d: -f 1,3,5-7

root:0:root:/root:/bin/bash

bin:1:bin:/bin:/sbin/nologin

daemon:2:daemon:/sbin:/sbin/nologinpaste

paste单词意思是粘贴。该命令主要用来将多个文件的内容合并,与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的内容合并为一行

实例:[root@bash ~]# cat a

aa

bb

cc

dd

ee

[root@bash ~]# cat b

xx

hh

cc

zz

ll

[root@bash ~]# paste a b

aa      xx

hh

bb      cc

cc      zz

dd      ll

ee

[root@bash ~]# paste -d: a b   #使用冒号作为分隔符

aa:xx

:hh

bb:cc

cc:zz

dd:ll

ee:

[root@bash ~]# paste -s a b #a文件合并一行,b文件合并一行

aa              bb      cc      dd      ee

xx      hh      cc      zz      lljoin

join将两个文件中,指定栏位内容相同的行连接起来。

1.命令格式:join [-i][-a<1或2>][-e][-o] [-t][-v<1或2>][-1][-2][--help] [--version][文件1][文件2]

2.命令参数:-a<1或2>   除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。

-i或--igore-case   比较栏位内容时,忽略大小写的差异。

-o   按照指定的格式来显示结果。

-t   使用栏位的分隔字符。

-1   连接[文件1]指定的栏位。

-2   连接[文件2]指定的栏位。

3.命令说明:

默认连接是每个文件的第一个字段。

指定输出字段: -o ... 其中FILENO=1表示第一个文件,FILENO=2表示第二个文件,FIELDNO表示字段序号,从1开始编号。默认会全部输出,但关键字列只输出一次。 比如:-o 1.1 1.2 2.2 表示输出第一个文件的第一个字段、第二个字段,第二个文件的第二个字段。

使用示例

示例一 内连接(忽略不匹配的行)不指定任何参数的情况下使用join命令,就相当于数据库中的内连接,关键字不匹配的行不会输出。[root@rhel55 linux]# cat month_cn.txt

1       一月

2       二月

3       三月

4       四月

5       五月

6       六月

7       七月

8       八月

9       九月

10      十月

11      十一月

12      十二月

13      十三月,故意的

[root@rhel55 linux]# cat month_en.txt

1       January

2       February

3       March

4       April

5       May

6       June

7       July

8       August

9       September

10      October

11              November

12      December

14      MonthUnknown

注:注意两个文件的内容,中文版的多了十三月,英文版的多了14月,这纯粹是为了方便演示。[root@rhel55 linux]# join month_cn.txt month_en.txt

1 一月 January

2 二月 February

3 三月 March

4 四月 April

5 五月 May

6 六月 June

7 七月 July

8 八月 August

9 九月 September

10 十月 October

11 十一月 November

12 十二月 December

[root@rhel55 linux]#

示例二 左连接(又称左外连接,显示左边所有记录)显示左边文件中的所有记录,右边文件中没有匹配的显示空白。[root@rhel55 linux]# join -a1 month_cn.txt month_en.txt

1 一月 January

2 二月 February

3 三月 March

4 四月 April

5 五月 May

6 六月 June

7 七月 July

8 八月 August

9 九月 September

10 十月 October

11 十一月 November

12 十二月 December

13 十三月

[root@rhel55 linux]#

示例三 右连接(又称右外连接,显示右边所有记录)显示右边文件中的所有记录,左边文件中没有匹配的显示空白。[root@rhel55 linux]# join -a2 month_cn.txt month_en.txt

1 一月 January

2 二月 February

3 三月 March

4 四月 April

5 五月 May

6 六月 June

7 七月 July

8 八月 August

9 九月 September

10 十月 October

11 十一月 November

12 十二月 December

14 MonthUnknown

[root@rhel55 linux]#

**示例四 全连接(又称全外连接,显示左边和右边所有记录)**

[root@rhel55 linux]# join -a1 -a2 month_cn.txt month_en.txt

1 一月 January

2 二月 February

3 三月 March

4 四月 April

5 五月 May

6 六月 June

7 七月 July

8 八月 August

9 九月 September

10 十月 October

11 十一月 November

12 十二月 December

13 十三月

14 MonthUnknown

[root@rhel55 linux]#

示例五 指定输出字段'比如参数 -o 1.1 表示只输出第一个文件的第一个字段。[root@rhel55 linux]# join -o 1.1 month_cn.txt month_en.txt

1

2

3

4

5

6

7

8

9

10

11

12

[root@rhel55 linux]# join -o 1.1 2.2 month_cn.txt month_en.txt

1 January

2 February

3 March

4 April

5 May

6 June

7 July

8 August

9 September

10 October

11 November

12 December

[root@rhel55 linux]# join -o 1.1 2.2 1.2 month_cn.txt month_en.txt

1 January 一月

2 February 二月

3 March 三月

4 April 四月

5 May 五月

6 June 六月

7 July 七月

8 August 八月

9 September 九月

10 October 十月

11 November 十一月

12 December 十二月

[root@rhel55 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 十二月

[root@rhel55 linux]#

示例六:我们知道 /etc/passwd 第四个字段是 GID那个 GID 记录在 /etc/group 当中的第三个字段,请问如何将两个文件整合?[root@www ~]# head -n 3 /etc/passwd /etc/group

==> /etc/passwd <==

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

==> /etc/group <==

root:x:0:root

bin:x:1:root,bin,daemon

daemon:x:2:root,bin,daemon

# 从上面可以看到,确实有相同的部分喔!赶紧来整合一下!

[root@www ~]# join -t ':' -1 4 /etc/passwd -2 3 /etc/group

0:root:x:0:root:/root:/bin/bash:root:x:root

1:bin:x:1:bin:/bin:/sbin/nologin:bin:x:root,bin,daemon

2:daemon:x:2:daemon:/sbin:/sbin/nologin:daemon:x:root,bin,daemon

# 同样的,相同的字段部分被移动到最前面了!所以第二个文件的内容就没再显示。

五、文本分析wc

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

1.命令格式:

wc [选项]文件...

2.命令功能:

统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。

3.命令参数:-c 统计字节数。

-l 统计行数。

-m 统计字符数。这个标志不能与 -c 标志一起使用。

-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

-L 打印最长行的长度。

-help 显示帮助信息

--version 显示版本信息

4.使用实例:

实例1:查看文件的字节数、字数、行数

命令:wc test.txt

输出:[root@localhost test]# cat test.txt

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# wc test.txt

7  8 70 test.txt

[root@localhost test]# wc -l test.txt

7 test.txt

[root@localhost test]# wc -c test.txt

70 test.txt

[root@localhost test]# wc -w test.txt

8 test.txt

[root@localhost test]# wc -m test.txt

70 test.txt

[root@localhost test]# wc -L test.txt

17 test.txt

说明:7 8 70 test.txt

行数 单词数 字节数 文件名

实例2:用wc命令怎么做到只打印统计数字不打印文件名[root@localhost test]# wc -l test.txt

7 test.txt

[root@localhost test]# cat test.txt |wc -l

7

说明:

使用管道线,这在编写shell脚本时特别有用。

实例3:用来统计当前目录下的文件数

命令:

ls -l | wc -l

输出:[root@localhost test]# cd test6

[root@localhost 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

[root@localhost test6]# ls -l | wc -l

8

[root@localhost test6]#

说明:

数量中包含当前目录sort

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按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 的账号进行排序[root@www ~]# cat /etc/passwd | sort

adm:x:3:4:adm:/var/adm:/sbin/nologin

apache:x:48:48:Apache:/var/www:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。

实例二:/etc/passwd 内容是以 : 来分隔的,以第三栏来排序[root@www ~]# cat /etc/passwd | sort -t ':' -k 3

root:x:0:0:root:/root:/bin/bash

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

实例三:默认是以字符串来排序的,如果想要使用数字排序:[root@www ~]#cat /etc/passwd | sort -t ':' -k 3n

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

实例四:默认是升序排序,如果要倒序排序[root@www ~]#cat /etc/passwd | sort -t ':' -k 3nr

nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

ntp:x:106:113::/home/ntp:/bin/false

messagebus:x:105:109::/var/run/dbus:/bin/false

sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

实例五:如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。[root@www ~]#cat /etc/passwd |  sort -t':' -k 6.2,6.4 -k 1r

sync:x:4:65534:sync:/bin:/bin/sync

proxy:x:13:13:proxy:/bin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

实例六:查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重:[root@www ~]#cat /etc/passwd |  sort -t':' -k 7 -u

root:x:0:0:root:/root:/bin/bash

syslog:x:101:102::/home/syslog:/bin/false

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologinuniq

uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。

1.命令格式:

uniq [-idcu]

2.常用参数:-i:忽略大小写字符的不同;

-c:显示每行重复的次数

-u:只显示唯一的行

-d:仅显示重复过的行

实例:

a.直接删除未经排序的文件,将会发现没有任何行被删除[root@www ~]#cat testfile

hello

world

friend

hello

world

hello

[root@www ~]##uniq testfile

hello

world

friend

hello

world

hello

b.排序文件,默认是去重[root@www ~]##cat words | sort |uniq

friend

hello

world

c.排序之后删除了重复行,同时在行首位置输出该行重复的次数[root@www ~]##sort testfile | uniq -c

1 friend

3 hello

2 world

d.仅显示存在重复的行,并在行首显示该行重复的次数[root@www ~]##sort testfile | uniq -dc

3 hello

2 world

e.仅显示不重复的行[root@www ~]#sort testfile | uniq -u

frienddiff

diff 命令是 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行。a

a

a

a

a

a

a

第二个文件叫做f2,修改f1而成,第4行变成b,其他不变。a

a

a

b

a

a

a

b、正常格式的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(即AT&T版本的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 ****

a

a

a

!a

a

a

a

--- 1,7 ----

a

a

a

!b

a

a

a

这个结果分成四个部分。

第一部分的两行,显示两个文件的基本情况:文件名和时间信息。*** f1 2012-08-29 16:45:41.000000000 +0800

--- f2 2012-08-29 16:45:51.000000000 +0800

"***"表示变动前的文件,"---"表示变动后的文件。

第二部分是15个星号,将文件的基本情况与变动内容分割开。***************

第三部分显示变动前的文件,即f1。*** 1,7 ****

a

a

a

!a

a

a

a

这时不仅显示发生变化的第4行,还显示第4行的前面三行和后面三行,因此一共显示7行。所以,前面的"*** 1,7 ****"就表示,从第1行开始连续7行。

另外,文件内容的每一行最前面,还有一个标记位。如果为空,表示该行无变化;如果是感叹号(!),表示该行有改动;如果是减号(-),表示该行被删除;如果是加号(+),表示该行为新增。

第四部分显示变动后的文件,即f2。--- 1,7 ----

a

a

a

!b

a

a

a

除了变动行(第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 @@

a

a

a

-a

+b

a

a

a

它的第一部分,也是文件的基本信息。--- 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行。

第三部分是变动的具体内容。a

a

a

-a

+b

a

a

a

除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做"合并格式"。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。patch

实例:diff输出补丁文件,patch给旧文件打补丁[root@bash ~]# cat f1

Hi,

Hello,

How are you?

I am fine,

Thank you.

[root@bash ~]# cat f2

Hello,

Hi,

How are you?

I am fine.

[root@bash ~]# diff -u f1 f2 > diff.patch  #输出不定文件

[root@bash ~]# patch -b f1 diff.patch   #patch给f1打补丁并且备份原来文件

patching file f1

[root@bash ~]# cat f1

Hello,

Hi,

How are you?

I am fine.

六、文本字符转换tr

tr用来从标准输入中通过替换或删除操作进行字符转换。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"[root@localhost ~]# cat host

:a b c replace e f g replace this is a test page replace

[root@localhost ~]# 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命令“统一”字母大小写(小写 --> 大写)

[root@localhost ~]# cat host | tr [a-z] [A-Z]

:A B C REPLACE E F G REPLACE THIS IS A TEST PAGE REPLACE

(大写 --> 小写)

[root@localhost ~]# cat host | tr [A-Z] [a-z]

实例二:把f1中0到9转换为a到j[root@localhost ~]# cat f1

A b c D

e F G H 9 0 8 7 63

h b mfd dgg

[root@localhost ~]# cat f1|tr [0-9] [a-j]

A b c D

e F G H j a i h gd

h b mfd dgg

实例三:删除文件host中出现的"replace"字符[root@localhost ~]# cat host

:a b c replace e f g replace this is a test page replace

[root@localhost ~]# cat host|tr -d 'replace'

: b    f g  this is  tst g

【注意】这里,凡是在host文件中出现的'r','p','l','a','c','e'字符都会被删除!而不是紧紧删除出现的"replace”字符串。

删除文件file中出现的换行'\n'、制表'\t'字符[root@localhost ~]# cat file | tr -d "\n\t" > new_file

不可见字符都得用转义字符来表示的,这个都是统一的。

实例四:删除“连续着的”重复字母,只保留第一个[root@localhost ~]# cat file | tr -s [a-zA-Z] > new_file

实例五:删除空行[root@localhost ~]# cat file | tr -s "\n" > new_file

实例六:删除Windows文件“造成”的'^M'字符[root@localhost ~]# cat file | tr -d "\r" > new_file

或者[root@localhost ~]# cat file | tr -s "\r" "\n" > new_file

【注意】这里-s后面是两个参数"\r"和"\n",用后者替换前者

实例七:用空格符\040替换制表符\011[root@localhost ~]# cat file | tr -s "\011" "\040" > new_file

实例八:把路径变量中的冒号":",替换成换行符"\n"[root@localhost ~]# echo $PATH | tr -s ':' '\n'

/usr/local/sbin

/usr/local/bin

/sbin

/bin

/usr/sbin

/usr/bin

/root/bin

实例九:删除f1中除了数字换行之外的所有字符

[root@localhost ~]# cat f1

一月     1

二月     2

三月     3

四月     4

五月     5

六月     6

七月     7

八月     8

九月     9

十月     10

十一月   11

十二月   12

十三月   13

[root@localhost ~]# tr -cd '[0-9]\n' 

1

2

3

4

5

6

7

8

9

10

11

12

13

实例十:利用ifconfig去ipv4地址

[root@localhost ~]# ifconfig|tr -cs '[0-9].' '\n'|sort -ut '.' -k3n

127.0.0.1

192.168.1.255

192.168.1.8

255.255.255.0

实例十一:查出/tmp的权限用数字表示

[root@localhost ~]# stat /tmp | tail -4|head -1|tr -s ' ' ':'|cut -d: -f2|tr -dc '[0-9]\n'

1777

实例十二:统计/etc/init.d/functions中每个单词重复的个数

[root@localhost ~]# cat /etc/init.d/functions |tr -sc '[:alpha:]' '\n'|sort|uniq -c|sort -n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国家开放大学计算机基础实训项目一,国家开放大学电大专科《微机系统与维护》网络课实训11及实训12作业及答案...

国家开放大学电大专科《微机系统与维护》网络课实训11及实训12作业及答案 实训11 微机软件系统的维护实训报告 实训内容 操作系统维护工具的使用。注册表的维护。Windows优化大师软件的使用。实训要求 1&#xff0e;掌握系统维护工具的使用并对微机系统进行优化操作 2&#xff…

拼多多出现大Bug:100无门槛券随便领,一晚损失200亿

全世界只有3.14 % 的人关注了数据与算法之美据悉从20号凌晨开始&#xff0c;拼多多出现了一个超级大Bug&#xff0c;用户可以领取100元无门槛券&#xff0c;注意是领取&#xff0c;不是抢购。专职羊毛党发现了这个大Bug&#xff0c;半夜打电话喊人薅羊毛&#xff01;有的大牛已…

记一次 .NET 某三甲医院HIS系统 内存暴涨分析

一&#xff1a;背景 1. 讲故事前几天有位朋友加wx说他的程序遭遇了内存暴涨&#xff0c;求助如何分析&#xff1f;和这位朋友聊下来&#xff0c;这个dump也是取自一个HIS系统&#xff0c;如朋友所说我这真的是和医院杠上了????????????&#xff0c;这样也好&#x…

flex ColorPicker

flex ColorPicker <?xml version"1.0" encoding"utf-8"?> <s:Application xmlns:fx"http://ns.adobe.com/mxml/2009" xmlns:s"library://ns.adobe.com/flex/spark" xmlns:mx"libra…

怎么把计算机隐藏文件显示出来,怎么把隐藏的文件夹显示出来

电脑中病毒后&#xff0c;比例exe病毒&#xff0c;很多文件夹都会被隐藏起来。那么怎么显示出来呢?以下是小编整理的隐藏的文件夹显示出来的步骤&#xff0c;希望可以帮助大家!1.在要设置显示隐藏文件夹的目录下→鼠标右键空白处→在右键菜单栏中选择“新建”→“文本文档”&a…

数字转字符函数_Excel之文本函数CONCATENATE/TEXT/LEFT/MID/RIGHT/FIND/LEN

本部分主要包CONCATENATE函数、LEFT函数、RIGHT函数、MID函数、LEN函数、FIND函数、SEARCH函数、SUBSTITUTE函数、REPLACE函数、TRIM函数、CLEAN函数、LOWER函数、UPPER函数、PROPER函数、EXCACT函数、TEXT函数、DOLLAR函数、VALUE函数、CHAR函数、CODE函数、T函数、FIXED函数和…

ML.NET Cookbook:(11)如果我的训练数据不在文本文件中怎么办?

对于ML.NET&#xff0c;通常演示的用例是当训练数据驻留在磁盘的某个地方时&#xff0c;我们使用TextLoader来加载它。然而&#xff0c;在真实的训练场景中&#xff0c;训练数据可以在其他地方&#xff1a;在一堆SQL表中&#xff0c;从日志文件中提取&#xff0c;甚至动态生成。…

计算机表演赛新疆赛区,【图】第二十六届中国儿童青少年威盛中国芯HTC计算机表演赛“中国电信天翼杯”新疆赛区总决赛圆满结束_乌鲁木齐教育信息网...

新疆赛区自2006年首次参加中国儿童青少年计算机表演赛至今&#xff0c;已经连续成功举办了十一届赛事。第二十六届中国儿童青少年威盛中国芯HTC计算机表演赛“中国电信天翼杯”新疆赛区活动启动以来&#xff0c;新疆赛区组委会办公室积极组织专家通过网络直播形式对全疆各级信息…

VC中新建的类不见了的解决方法

方法工程(project&#xff0c;然后add to project 然后 files,把不见得类.cpp和.h文件包含进来或者1、关闭工程2、把.ncb和.clw文件删除3. 重新打开工程

postgresql 动态添加过滤条件_通过窗口函数进行过滤导致Postgresql

好的,最初这只是我们与我的一个朋友的笑话,但它变成了有趣的技术问题:)我有以下的表格&#xff1a;CREATE TABLE stuff(id serial PRIMARY KEY,volume integer NOT NULL DEFAULT 0,priority smallint NOT NULL DEFAULT 0,);该表包含所有我的东西的记录,具有相应的卷和优先级(我…

基于Redis的分布式锁和Redlock算法

在单进程的系统中&#xff0c;当存在多个线程可以同时改变某个变量&#xff08;可变共享变量&#xff09;时&#xff0c;就需要对变量或代码块做同步&#xff0c;使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻…

css-6 df15,webpack 样式文件的代码分割(15)

获取全套webpack 4.x教程&#xff0c;请访问瓦力博客在上一小节&#xff0c;我们将开发环境和生产环境区分开来。这一小节&#xff0c;我们来操作如何将样式文件的代码分割。1.安装yarn add mini-css-extract-plugin此插件将CSS提取到单独的文件中。它为每个包含CSS的JS文件创建…

基于mini2440的ov9650摄像头裸机测试

mini2440提供了一个摄像头接口&#xff0c;可以输出RGB24,RGB16的原始图像还可以输出编码的如YUV格式的图像&#xff0c;并提供了偏移翻转&#xff0c;放大缩小的功能。与开发板配套的摄像头模块为CAM130,采用ov9650的芯片。操作摄像头接口实现视频的采集与显示&#xff0c;主要…

据说这是史上最牛逼的可视化神器

全世界只有3.14 % 的人关注了数据与算法之美我们粉丝里面有很多小伙伴喜欢玩数据分析&#xff0c;粗略估计有几千人。数据分析离不开数据可视化。比如我们前面介绍过pandas画图&#xff0c;matplotlib画图&#xff0c;pyecharts画图当然还有Tableau&#xff0c;今天推荐一款更牛…

excel统计分析——S-W正态性检验

参考资料&#xff1a; [1]马兴华,张晋昕.数值变量正态性检验常用方法的对比[J].循证医学,2014,14(02):123-128. 统计推断——正态性检验&#xff08;图形方法、偏度和峰度、统计&#xff08;拟合优度&#xff09;检验&#xff09;_sm.distributions.ecdf-CSDN博客 【统计学】…

怎能错过这个技术集市!转发有奖,惊喜连连!

点击蓝字 关注我们Learn. Connect. Code. 微软一年一度的Build大会即将拉开帷幕&#xff08;5月25-27日&#xff09;&#xff0c;今年的主题演讲&#xff0c;全球CEO Satya Nadella将会深入我们的工作&#xff0c;探讨开发者速度&#xff0c;智能云原生应用&#xff0c;以及在…

百度云cdn设置州五年制大专_[百度云CDN]配置过程坑点集合

图片字体图标访问不正常&#xff1f;CDN直接403或404&#xff1f;防盗链挡了自家网站&#xff1f;QPS和CORS莫名其妙&#xff1f;本文将总结百度云CDN使用过程中——回源HOST与源站地址&#xff0c;防盗链白名单Referer&#xff0c;IP访问限频QPS&#xff0c;跨域访问CORS——这…

文件服务器搭建centos,centos8搭建ftp文件服务器

1.安装vsftpdyum install -y vsftpd2.执行以下命令设置FTP服务开机自启动systemctl enable vsftpd.service3.执行以下命令启动FTP服务systemctl start vsftpd.service4.执行以下命令创建ftp用户useradd ftpuser5.执行以下命令并按照提示设置“ftpuser"用户密码passwd ftpu…

CSS 类选择器

在CSS 中&#xff0c;类选择器以一个点号显示&#xff1a; .center {text-align: center} 在上面的例子中&#xff0c;所有拥有 center 类的 HTML 元素均为居中。 在下面的 HTML 代码中&#xff0c;h1 和 p 元素都有 center 类。这意味着两者都将遵守 ".center" 选择…

将历史、数学、语文、地理、政治知识融会贯通的诀窍就是它

▲卢sir特别推荐点击上图进入玩酷屋在这个知识都是碎片化的时代&#xff0c;系统化的知识&#xff0c;显得弥足珍贵。今天小木就专门给大家推荐一套&#xff0c;将知识系统化整理&#xff0c;放到时间轴上展示的——《时间上的人物谱》里。这是一套特别的工具书&#xff0c;是一…