Linux common commands are summarized in series (b)

High Command

1.grep (filter)

grep [参数] '匹配关键字' filename
	-c :(count 符合关键字的总条数)
	-i :(ignore 过滤时忽略大小写)

2.sed

sed是一种在线编辑器 , 一次处理一行内容 , 处理时处理的行放在
临时缓冲区 只是视图上显示了改变后的内容 ,文件内容本身内容并
没有被改变,除非使用定向存储输出,主要用于自动编辑一个或多个
文件,简化操作
1.命令格式
	sed [参数] [动作]
	2.使用参数
		-n 只显示经郭sed处理的数据    不加会显示所有数据
		-e 直接在命令行模式下进行sed动作的编辑
		-f 直接将sed的动作写在一个文件内,-f file 则可运行file内
		sed动作
		-i 直接修改读取的文件内容 而不是输出到终端
3.动作
		[n1[]n2] function
		n1 n2 一般代表选择操作行数的范围(包含n1 n2) 如 我要
		操作的 行数是10-20行 [10,20[动作]]
		
		function:
		a:新增,a 的后边可加字符串 这些字符串会出现在
		当前行之后新增的行中
		c:取代 c之后可接字符串 这些字符串取代n1 n2 之间
		的行
		d:删除, d后通常不接任何字符串
		i:插入 ,i后可接字符串 这些字符会在新的一行出现在目前
		行的上一行
		p:将某个选择的数据印出(在显示器上打印) 
		通常p会与参数 sed -p 一起使用
		s:取代 课直接进行取代 通常这个s的动作可搭配正则
		例:1,20/old/new/g
4.使用示例
	******以"行"为单位的新增/删除	******
	1.将/etc/passwd的内容列出并且打印出行号,同时,请将第2-5行删除
		命令:nl /etc/passwd | sed '2,5d'
	 说明:d 是删除动作
	 2.只删除第二行
	  命令    nl /etc/passwd | sed '2d'
         3 删除第3行到最后行 
                命令    nl /etc/passwd | sed '3,$d'   
         4 在第2行后面加上"hello man!"字样
                命令    nl /etc/passwd | sed '2a hello man!'  
         5在第2行后面加上多行字符串"hello man!"和"yeah!,ok!"字样
	 	命令    nl /etc/passwd | sed '2a hello man!\yeah!,ok!'
           说明:每一行之间都必须要以反斜杠[\]来进行新行的添加!
           
 	********以"行"为单位的替换与显示*******
	1.将2-5行的内容取代成"2-5行内容汇总"  
		42命令    nl /etc/passwd | sed '2,5c 2-5行内容汇总'  
	2. 仅列出/etc/passwd文件内的第5-7行 
	       命令    nl /etc/passwd | sed -n '5,7p'
	
	 ********数据的查找并删除******** 
	1. 删除 /etc/passwd所有包含root的行,只输出其他行
	        命令    nl /etc/passwd | sed '/root/d'
        ********数据的查找并执行命令******** 
        1. 匹配上"root"字符串后,搜索/etc/passwd,找到root对应的行,执行后面花括号的一组命令
	         命令    nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'  
	     说明:每个命令之间用分号分隔。
	 ********数据的查找并替换********
	1.把/etc/passwd中的"root"替换成"rootUser" 
	        命令    nl /etc/passwd | sed 's/root/rootUser/g' 
	 ********多点编辑********
        1.sed承接多个编辑命令,如:删除/etc/passwd第三行到末尾的数据,并把bash替换成blueshell 
	        命令    nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'  
	  ********直接修改文件内容******* 
	1.在test.txt最后一行加入[This is a test]    命令    sed -i '$a This is a test' test.txt

3.awk command
awk is a powerful text analysis tool, relative to grep to find, edit sed of, awk in its data analysis and report generation, it is particularly strong. Awk is to simply read the file line by line, as the default delimiter spaces each row of slices, cut portions then various evaluation

1. 命令格式
     awk '{pattern + action}' {filenames}
     
2. 功能描述 
     pattern就是要表示的正则表达式,用斜杠括起来。而action是在找到匹配内容时所执行的一系列命令。    awk最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。    通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

3. awk 内置变量 
    awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC    :命令行参数个数
    ARGV    :命令行参数排列
    ENVIRON :支持队列中系统环境变量的使用
    FILENAME:awk浏览的文件名
    FNR     :浏览文件的记录数 
    FS      :设置输入域分隔符,等价于命令行 -F选项
    NF      :浏览记录的域的个数
    NR      :已读的记录数
    OFS     :输出域分隔符
    ORS     :输出记录分隔符 
    RS      :控制记录分隔符
    $0      :整条记录
    $1      :表示当前行的第一个域

4. 使用示例   
  示例数据: 
         命令    last -n 5    #仅取出前五行   
         结果
         root     pts/1   192.168.1.100  Tue Feb 10 11:21   still logged in
         root     pts/1   192.168.1.100  Tue Feb 10 00:46 - 02:28  01:41.
	 root     pts/1   192.168.1.100  Mon Feb  9 11:41 - 18:30  06:48.                		
	 tledu    pts/1   192.168.1.100  Mon Feb 9 11:41 - 11:41  00:00.
         root     tty1                   Fri Sep  5 14:09 - 14:10  00:01.
	<1> 如果只是显示最近登录的5个账号
	    命令    last -n 5 | awk '{print $1}' 
   说明:读入有换行符分割的一条记录,然后将记录按指定的域分割符划分域,填充域。$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键"或"[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。
    
        <2> 只显示/etc/passwd的账户
            命令    cat /etc/passwd | awk -F ':' '{print $1}'
            
        <3> 只显示/etc/passwd的账户和账户对应的shell,而账户和shell之间以tab键分割 
           命令    cat /etc/passwd | awk -F ':' '{print $1"\t"$7}' 
           
        <4> 只显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"
           命令    cat /etc/passwd | awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
           
        <5> 搜索/etc/passwd有root关键字的所有行
            命令    awk -F : '/root/' /etc/passwd
            
        <6> 搜索/etc/passwd有root关键字的所有行,并显示对应的shell    命令    awk -F : '/root/{print $7}' /etc/passwd 
        
        <7> 统计/etc/passwd的文件名,每行的行号,每行的列数,对应的完整行内容   
            命令    awk -F ':' '{print "filename:" FILENAME ",linenum:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
            



5.awk编程
5.1 变量和赋值
除了awk的内置变量,awk还可以自定义变量。
	<1> 下面统计/etc/passwd的账户人数 
	命令    awk '{count++;print $0;} END{print "user count is ",count}' /etc/passwd
	说明:count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。
	<2> 上例中没有初始化count变量的值,妥当起见,还是先赋值
	命令    awk 'BEGIN {count=0;print "[start]user count is ",count} {count++;print $0;} END{print "user count is ",count}'
	<3> 统计某个文件夹下的文件占用的字节数
	命令    ls -l|awk 'BEGIN {size=0;} {size+=$5;} END{print "[end]size is ",size}'
	说明:统计不包括文件夹的子目录
5.2 条件语句
声明方式:
     if表达式. {语句;}
         if表达式1. {语句;} else if表达式2. {语句;} 
         if表达式. {语句;} else {语句;}
      <1> 统计某个文件夹下的文件占用的字节数,过滤4096大小的文件一般都是文件夹.
            命令    ls -l | awk 'BEGIN {size=0;print "[start]size is ",size} {if($5!=4096) {size+=$5;}} END{print "[end]size is ",size/1024/1024,"M"}'
 5.3 循环语句
 声明方式:    while、do/while、for、break、continun

4.seq command

seq命令用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式、宽度、分割符号进行控制。
5. 命令格式  
       seq [选项] 尾数 
       seq [选项] 首数 尾数
       seq [选项] 首数 增量 尾数
6. 选项 
       -f:--format,格式 
       -s:--separator,字符串,使用指定的字符串分割数字默认使用个"\n"分割.  
       -w:--sequal-width,在列前添加0,使得宽度相同

7. 使用示例  
  <1> 产生5以内的整数   
        命令    seq 5    
  <2> 产生-2~10内的整数,增量为2  
        命令    seq -2 2 10  
  <3> 产生98~101之间的整数,并且要求输出数字宽度相同,不足的用空格补足    
     命令    seq -f "%3g" 98 101    
     结果
                 98   
                 99        
                 100    
                  101    
   <4> 产生98~101之间的整数,并且要求数字之间的分隔符为":::"   
         命令    seq -s ":::" -f "%03g" 98 101
   <5> 输出98~100之间的整数,要求宽度一致 
         命令    seq -w 98 101    注意:-w不能和-f一起用,输出是同宽的

5.cut command
cut command to display part of the line, delete the files in the specified field. cut is often used to display the contents of the file. Description: This command has two functions, one is used to display the contents of the file, which in turn reads the file specified by the parameter file, and outputs them to the contents of the standard output; the other is connected to two or more file, such as Cut fl f2> f3 will fl and f2 content file merge, then by the action of output redirection symbol ">", and put them in file f3.



1. 命令格式
	cut选项 参数
2.选项
-b:仅显示行中指定直接范围的内容
-c:仅显示行中指定范围的字符
-d:指定字段的分隔符,默认的字段分隔符为“TAB”
-f:显示指定字段的内容-n:与“-b”选项连用,不分割多字节字符
--complement:补足被选择的字节、
字符或字段
3.参数文件:指定要进行内容过滤的文件。


4.常用示例例如有一个学生报表信息,包含No、Name、Mark、Percent:[root@localhost text]# cat test.txt 
No      Name      Mark      Percent
01      tom       69        91
02      jack      71        87
03      alex      68        98使用-f选项提取指定字段:


使用-f选项提取指定字段:
[root@localhost text]# cut -f 1 test.txt
 No
 01
 02
 03
 [root@localhost text]# cut -f 2,3 test.txt
  Name    Mark
  tom     69
  jack    71
  alex    68



--complement 选项提取指定字段之外的列(打印除了第二列之外的列):[root@localhost text]# cut -f 2 --complement test.txt
 No      Mark      Percent
 01      69        91
 02      71        87
 03      68        98
 使用-d选项指定字段分隔符:
 [root@localhost text]# cat test2.txt No;Name;Mark;Percent
 01;tom;69;91
 02;jack;71;87
 03;alex;68;98
 [root@localhost text]# cut -f 2 –d ";" test2.txt
  Name
  tom
  jack
  alex

6.sort command
sort command is very useful in Linux, it will sort files, and sort the results to standard output. sort command either, you can also get input from stdin from a particular file.



1. 命令格式
sort选项.参数.
2.选项
-b:忽略每行前面开始出的空格字符;
-c:检查文件是否已经按照顺序排序;
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
-f:排序时,将小写字母视为大写字母;
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
-m:将几个排序号的文件进行合并;
-M:将前面3个字母依照月份的缩写进行排序;
-n:依照数值的大小排序;-o<输出文件>:将排序后的结果存入制定的文件;
-r:以相反的顺序来排序;
-t<分隔字符>:指定排序时所用的栏位分隔字符;
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
3.参数文件:指定待排序的文件列表。
4.常用示例
sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
[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
注:uniq本身去重,是按照相邻行内容相同的规则进行去重
sort的-n、-r、-k、-t选项的使用:
[root@mail text]# cat sort.tx0t
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 -nk2 -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.3eee:60:5.1
将CC列数字从大到小顺序排列:
[root@mail text]# sort -nrk3 -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指定栏位分隔符为冒号

7.uniq command

如果排序完成了,将重复的行仅显示一次。注意,若文件未排序,该命令失效。
1.命令格式uniq [-ic] filename
2.参数-i:忽略大小写
-c:统计每行重复的次数
-d或
--repeated:仅显示重复出现的行列;
3.使用示例对文件的内容进行去重
sort input.txt | uniq
或者写成
sort –u input.txt
注意不要单独使用:uniq input.txt,是达不到不相邻行的去重效果
统计各行在文件中出现的次数
sort file.txt | uniq -c
在文件中找出重复的行
sort file.txt | uniq -d


8.wc command

统计文件中有多少行,多少字,多少字符
1.命令格式wc [-lwm] filename
2.参数
-l:仅显示行数
-w:仅显示字数英文单词个数.
-m:字符数
3.常用示例查看一个文件中有多少行
wc -l input.txt


Released seven original articles · won praise 0 · Views 230

Guess you like

Origin blog.csdn.net/SkyingData/article/details/104075505