第四次作业

一.文件内容浏览
1. 查看文件内容经常使用的命令
cat : 由第一行显示文件内容

tac:  从最后一行開始显示。与cat相反

nl :  文件内容和行号一起输出

more: 一页一页显示

less: 与more类似,能够往前翻页

head: 取头部几行

tail:  取尾部几行

od: 以二进制方式读取文件内容

2. cat命令


查看cat的參数 cat --h

$ cat --h

Usage: cat [OPTION] [FILE]...

Concatenate FILE(s), or standard input, to standard output.

-A, --show-all equivalent to -vET

与-vET等价

-b, --number-nonblank number nonblank output lines

输出行号,仅仅针对非空白行

-e equivalent to -vE

与-vE等价

-E, --show-ends display $ at end of each line

文件末尾展示$

-n, --number number all output lines

输出行号

-s, --squeeze-blank never more than one single blank line

合并多个空白行,仅仅输出一行

-t equivalent to -vT

-T, --show-tabs display TAB characters as ^I

将 TAB 展示为^I

-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB

展示一些看不出来的字符$ cat 1

hello world

hello linux查看行号和特殊符号

$ cat -n 1

1 hello world

2

3

4 hello linux

5

$ cat -A 1

hello^Iworld^M$

^M$

^M$

hello^Ilinux^M$

^M$-A參数 结尾以 $结束, TAB 以^I展示。 ^M表示windiows下的回车键。

cat一次全展示文件,当文件比較大时。来不及看就翻屏过了。

推荐使用more或less来查看文件。

3. more命令


more可翻页查看。

$ more filename经常使用命令:

空格 space : 向下翻页

Enter :           向下滚动一行

/字符串 :       向下查询字符串

:f  :                 显示当前行号

q :                 退出

b :                 往回翻页。仅仅在文件有作用。对管道无作用。

4. less命令
less也是一页一页的查看,与more不同的是能够向上翻页

$ less filename经常使用命令:

空格 space :          向下翻一页

Enter :                     向下一行

[PageDown] :        向下一页:

[PageUp] :             向上一页

/字符串:                  向下查询

?

字符串:                向上查询

n :                           反复前一个查询 / 或 ?

N :                          反向前一个查询 / 或 ?

q :                           退出

less的參数与man命令的參数类似,由于man命令就是调用less显示说明文档的。

5.grep命令
grep -n root /etc/passwd

cat -n /etc/passwd | awk -F: '{print $1}'   获取/etc/passwd的第一个域内容,并显示行号
结果:
     1  root
     2  bin
     3  daemon
     4  adm
     5  lp
     6  sync
     7  shutdown
     8  halt
     9  mail
    10  news
    11  uucp
    12  operator
获取指定行号的内容

例如,获取/etc/passwd文件中的10-15行内容

先获取前15行内容,再从结尾获取5行记录,即
head -n 15 /etc/passwd | tail -n 5
或: 在awk里面有个内置变量  NR表示行号

awk 'NR>=10 && NR<=15' /etc/passwd 
例子,

查找 第1行至第二行
[root@localhost webapps]# awk 'NR>=1 && NR<=2 && match($0,"root"){print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

二.创建目录test
1.使用两种方式在test目录中创建文本文件text1.txt, text2.txt


使用Vim在文件text1.txt中写入

 Welcome to my Linux.
 You are the best.
 This is my first file to create on linux
设置行号,并将文本中my替换成your,将文件另存为new_test1.txt


 

将test中的文件拷贝到test2目录

将test2目录中的test1.txt重命名为test111.txt 

删除test目录中test1.txt  删除test目录 

2.将echo "This is my first time to use pipe"内容输出到屏幕上,且保存到pipe_data.txt中 


 二.cut命令使用
1.cut命令的选项
1)cut基本语法:

cut OPTION... [FILE]...
选项:
-f : 通过指定哪一个字段进行提取。cut命令使用“TAB”作为默认的字段分隔符。
-d : “TAB”是默认的分隔符,使用此选项可以更改为其他的分隔符。
--complement : 此选项用于排除所指定的字段。
--output-delimiter : 更改输出内容的分隔符。
2)如何分割

cut最常用的选项是-d和-f的组合。它基本上会根据特定的分隔符和列出的字段提取内容。

下面的代码仅使用分隔符:打印/etc/passwd文件中每一行的第一个字段。

[root@localhost ~]# cut -d ':' -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown

下面的代码从/etc/passwd文件提取第一和第六个字段:

要显示字段的范围,请指定以-分隔的开始字段和结束字段,如下所示:

3)排除所指定的字段

在下面的代码中,打印所有字段,除了/etc/passwd文件中的第二个字段:

[root@localhost ~]# grep '/bin/bash' /etc/passwd|cut -d ':' --complement -f 2
root:0:0:root:/root:/bin/bash
bob:1000:1001::/home/bob:/bin/bash
user01:1001:1002::/home/user01:/bin/bash

 4)如何指定一个输出内容的分隔符

要指定输出分隔符,请使用–output-delimiter选项。输入分隔符由-d选项指定,默认情况下输出分隔符与输入分隔符相同。
先看一下没有使用–output-delimiter选项,是什么样子的:

[root@localhost ~]# cut -d ':' -f1,7 /etc/passwd|sort
adm:/sbin/nologin
avahi:/sbin/nologin
bin:/sbin/nologin
bob:/bin/bash
chrony:/sbin/nologin
daemon:/sbin/nologin
dbus:/sbin/nologin
ftp:/sbin/nologin
games:/sbin/nologin
grafana:/sbin/nologin
halt:/sbin/halt
lp:/sbin/nologin
mail:/sbin/nologin
nfsnobody:/sbin/nologin
nobody:/sbin/nologin
ntp:/sbin/nologin
operator:/sbin/nologin

现在使用–output-delimiter选项,输出分隔符使用’ ‘空格分隔,看一下是什么样子的:

[root@localhost ~]# cut -d ':' -f1,7 --output-delimiter=' ' /etc/passwd|sort
adm /sbin/nologin
avahi /sbin/nologin
bin /sbin/nologin
bob /bin/bash
chrony /sbin/nologin
daemon /sbin/nologin
dbus /sbin/nologin
ftp /sbin/nologin
games /sbin/nologin
grafana /sbin/nologin
halt /sbin/halt
lp /sbin/nologin
mail /sbin/nologin
nfsnobody /sbin/nologin
nobody /sbin/nologin
ntp /sbin/nologin
operator /sbin/nologin

三.uniq命令使用
用法:uniq [OPTION]... [INPUT [OUTPUT]]

选项:

-c, --count        打印每行出现的次数

-d, --repeated        只打印重复出现的行

-D                        打印所有重复行

--all-repeated[=METHOD]

                        类似 -D,使用空行分隔每个组,METHOD=none,prepend,separate

-f, --skip-fields=N        不比较前 N 个字段

--group[=METHOD]

                        使用空行分隔每个组,METHOD=separate,prepend,append,both

-i, --ignore-case        忽略大小写

-s, --skip-chars=N        不比较前 N 个字符

-u, --unique                只打印出现一次的行

-z, --zero-terminated        行分隔符是 NUL 而不是换行符

-w, --check-chars=N        比较不多于 N 个字符

--help                                帮助文档

--version                           版本信息

1.使用示例:
1)使用下边的文本文件做例子:

[root@server dir]# cat uniq_test
Happy Birthday
Happy Birthday
Merry Christmas
Merry Christmas
Merry Christmas
Happy Valentine's Day
Happy Valentine's Day
Happy Birthday

2)先执行默认命令:

[root@server dir]# uniq uniq_test
Happy Birthday
Merry Christmas
Happy Valentine's Day
Happy Birthday

3)打印结果中的第1行和第4行是一样的,为什么呢?原因是 uniq 的功能是对于连续重复行只显示一次,但是最后一行并不是连续的,所以没有做处理,还是打印出来了。怎么不打印它呢?可以与 sort 命令配合使用:

[root@server dir]# sort uniq_test | uniq
Happy Birthday
Happy Valentine's Day
Merry Christmas

4)使用 -c 选项进行统计:

[root@server dir]# sort uniq_test | uniq -c
      3 Happy Birthday
      2 Happy Valentine's Day
      3 Merry Christmas

5)--all-repeated 的使用效果:

[root@server dir]# sort uniq_test | uniq --all-repeated
Happy Birthday
Happy Birthday
Happy Birthday
Happy Valentine's Day
Happy Valentine's Day
Merry Christmas
Merry Christmas
Merry Christmas
[root@server dir]# sort uniq_test | uniq --all-repeated=prepend
Happy Birthday
Happy Birthday
Happy Birthday
 
Happy Valentine's Day
Happy Valentine's Day
 
Merry Christmas
Merry Christmas
Merry Christmas
[root@server dir]# sort uniq_test | uniq --all-repeated=separate
Happy Birthday
Happy Birthday
Happy Birthday
 
Happy Valentine's Day
Happy Valentine's Day
 
Merry Christmas
Merry Christmas
Merry Christmas

6)接下来把测试文件改为下边的形式:

[root@server dir]# cat uniq_test
Happy Birthday
Happy Birthday
Merry Christmas
Merry ChrIstmas
Merry Christmas
Happy Christmas
Happy Valentine's Day
Happy Valentine's Day
Happy Birthday

7)使用 -f 选项,在过滤重复行时不比较某些字段:

[root@server dir]# uniq -f 1 uniq_test
Happy Birthday
Merry Christmas
Merry ChrIstmas
Merry Christmas
Happy Valentine's Day
Happy Birthday

可以看到,文件里的 "Happy Christmas" 没有打印,因为在不比较第一个字段的情况下,"Happy Christmas" 和 "Merry Christmas" 是相同的。

8)下边看一下 -i 选项,功能是忽略大小写:

[root@server dir]# uniq -i uniq_test
Happy Birthday
Merry Christmas
Happy Christmas
Happy Valentine's Day
Happy Birthday

可以看到,"Merry ChrIstmas" 没有打印。

9)下边看一下 -u 选项,只打印出现一次的行:

[root@server dir]# uniq -u uniq_test
Merry Christmas
Merry ChrIstmas
Merry Christmas
Happy Christmas
Happy Birthday

10)最后是两种关于字符比较的选项,-s 是比较 N 个字符后的内容,-w 是比较前 N 个字符的内容:

# 比较第5个字符之后的内容
[root@server dir]# uniq -s5 uniq_test
Happy Birthday
Merry Christmas
Merry ChrIstmas
Merry Christmas
Happy Valentine's Day
Happy Birthday
# 比较前5个字符
[root@server dir]# uniq -w5 uniq_test
Happy Birthday
Merry Christmas
Happy Christmas

四.sort命令
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。

语法:

sort(选项)(参数)
选项:

-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;
-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
参数:文件:指定待排序的文件列表。

实例:sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCLL码值进行比较,最后将他们按升序输出。

[root@mail text]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5

[root@mail text]# sort sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5
忽略相同行使用-u选项或者uniq:

[root@mail text]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5

[root@mail text]# sort -u sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5

或者

[root@mail text]# uniq sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
sort的-n、-r、-k、-t选项的使用:

[root@mail text]# cat sort.txt
AAA:BB:CC
aaa:30:1.6
ccc:50:3.3
ddd:20:4.2
bbb:10:2.5
eee:40:5.4
eee:60:5.1

#将BB列按照数字从小到大顺序排列:
[root@mail text]# sort -nk 2 -t: sort.txt
AAA:BB:CC
bbb:10:2.5
ddd:20:4.2
aaa:30:1.6
eee:40:5.4
ccc:50:3.3
eee:60:5.1

#将CC列数字从大到小顺序排列:
[root@mail text]# sort -nrk 3 -t: sort.txt
eee:40:5.4
eee:60:5.1
ddd:20:4.2
ccc:50:3.3
bbb:10:2.5
aaa:30:1.6
AAA:BB:CC

# -n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号
-k选项的语法格式:

FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End--------
 FStart.CStart 选项  ,  FEnd.CEnd 选项
这个语法格式可以被其中的逗号,分为两大部分,Start部分和End部分。Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。

从公司英文名称的第二个字母开始进行排序:

$ sort -t ' ' -k 1.2 facebook.txt
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000
使用了-k 1.2,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。

只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:

$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
baidu 100 5000
google 110 5000
sohu 100 4500
guge 50 3000
由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用-k 1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了-k 3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。

五.
1.将hello 123 world 456中的数字替换成空字符


2.将26个小写字母的后13个字母替换成大写字母
 

3.将hello 123 world 456中字母和空格替换掉,只保留数字
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值