一.文件内容浏览
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中字母和空格替换掉,只保留数字
?
?
|