zoukankan      html  css  js  c++  java
  • Linux三剑客入门

    grep文本过滤工具

    grep命令是Linux系统中最重要的命令之一,功能是从文本文件管道数据流中筛选匹配的数据,如果再配合正则表达式,功能十分强大,是Linux运维人员必备的命令

    语法:

    grep [options] [pattern]  [file]
    
    命令  参数   匹配模式   文件数据
    

    grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式

    参数选项 解释说明
    -v 排除匹配结果
    -n 显示匹配行与行号
    -i 不区分大小写
    -c 只统计匹配的行数
    -E 使用egrep命令
    --color=auto 为grep过滤结果添加颜色
    -w 只匹配过滤的单词
    -o 只输出匹配的内容

    案例

    cat /etc/passwd > /tmp/test_grep.txt
    
    grep  "login" /tmp/test_grep.txt  -n				#找出login有关行
    grep  "login" /tmp/test_grep.txt  -n -v			#找出没有login的行
    grep   "ROOT" /tmp/test_grep.txt  -i  			#忽略大小写,找出root有关行
    grep -E  "root|sync"  /tmp/test_grep.txt --color=auto		#同时过滤出root和sync有关行
    grep "login" /tmp/test_grep.txt  -c					#统计匹配结果的行数
    grep "login" /tmp/test_grep.txt   -n -o 	  #只输出匹配出的内容
     
    grep "oldboy" /tmp/test_grep.txt -w   	  	#完整匹配,字符串精确匹配,整个单词
    grep -E "^#|^$"  /tmp/test_grep.txt  	      #过滤掉空白和注释行 
    

    sed字符流编辑器

    注意sed和awk使用单引号,双引号有特殊解释

    sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器。

    sed是操作、过滤和转换文本内容的强大工具。常用功能包括对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。

    语法:

    sed [选项] [sed内置命令字符] [输入文件]
    

    选项:

    参数选项 解释
    -n 取消默认sed的输出,常与sed内置命令p一起用
    -i 直接将修改结果写入文件,不用-i,sed修改的是内存数据

    sed的内置命令字符用于对文件进行不同的操作功能,如对文件增删改查

    sed常用内置命令字符

    sed的内置命令字符 解释
    a append,对文本追加,在指定行后面添加一行/多行文本
    d Delete,删除匹配行
    i insert,表示插入文本,在指定行前添加一行/多行文本
    p Print ,打印匹配行的内容,通常p与-n一起用
    s/正则/替换内容/g 匹配正则内容,然后替换内容(支持正则),结尾g代表全局匹配

    案例:

    [root@pylinux tmp]# cat student.txt
    1,oldboy,100
    2,alex,99
    3,wupeiqi,80
    4,yuchao,60
    
    #不加-i参数,以下命令都不会写入如文件,仅修改内存数据
    sed 'a heiheihei' 	student.txt 	#匹配每一行,在下一行添加heiheihei
    sed '2a heiheihei'	 student.txt	#在第二行下面,添加heiheihei
    sed '3d' 	student.txt					  #删除第三行
    sed '2i haha'	 student.txt			  #在第二行上面,添加haha
    sed '2a heiha
    dadada' 	student.txt	#在第二行下面,添加多行数据
    sed '1,2d' 	student.txt				  #删除1和2行
    sed 's/wupeiqi/WUPEIQI/g'	 student.txt		#吧wupeiqi换成WUPEIQI
    sed 's#wupeiqi#WUPEIQI#g'	 student.txt		#效果同上
    sed '2p' 	student.txt -n					#打印第二行的内容,sed默认显示所有结果,-n不显示默认输出
    sed '1,3p' 	student.txt -n			  #显示1到3行的内容
    sed '11,$d'	 student.txt 				#删除11行一直到文件结尾
    
    
    
    

    awk基础入门

    awk是Linux实际工作中最重要的强大工具.

    awk不仅是Linux系统一个命令,也是种编程语言,可以处理数据/文件生成Excel。

    语法:

    awk [option] 'pattern{action}' file ..
    命令 参数			'条件{动作}'  文件..
    

    参数:

    参数 解释
    -F 指定字段分割
    -v 定义或修改awk内部变量

    案例:

    • awk的条件 NR表示行号,NR==5表示第五行
    • awk后面内容请使用单引号,双引号有特殊解析
    awk 'NR==2,NR==5' test_grep.txt			#显示第2到5行之间的内容
    

    awk '{print NR,$0}' test_grep.txt		#给所有内容加上行号,如同实现cat -n
    解释:NR 表示行号,$0表示一整行的内容,print是awk的命令,打印出结果,{print NR,$0}是awk固定语法
    
    awk 'NR==2||NR==6 {print NR,$0}' test_grep.txt		#显示文本的第二行和第六行
    awk 'NR==2,NR==6 {print NR,$0}' test_grep.txt			#显示文本的第二行到第六行
    

    awk -F ":" '{print NR,$1,$3,$NF}' test_grep.txt		
    解释:-F 指定分隔符,以冒号分割
    '{print NR,$1,$3,$NF}' 	打印出NR行号,$1第一列 $3第三列  $NF最后一列,注意$0表示整行
    
    • awk的替换查找函数,gsub()
    awk '{gsub("bin","BIN",$0);print $0}' test_grep.txt  
    解释:gsub("想替换的内容","替换后的内容",在一整行都替换;显示替换后的整行结果)
    
    • 取出网卡的ip地址,注意每台机器的信息不一样
    方法一:[root@pylinux tmp]# ifconfig eth0
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.141.32.137  netmask 255.255.192.0  broadcast 10.141.63.255
            ether 52:54:00:4f:ab:36  txqueuelen 1000  (Ethernet)
            RX packets 32262057  bytes 4978629753 (4.6 GiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 38885574  bytes 7916319323 (7.3 GiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
          
          
    ifconfig  eth0| awk -F "inet|netmask"  'NR==2 {print $2}'  
    解释:因为这里信息左右两边是inet和netmask,因此以它俩分割
    显示第二行的结果,第二列的信息
    
    方法二:
    [root@pylinux tmp]# ip addr show eth0
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 52:54:00:4f:ab:36 brd ff:ff:ff:ff:ff:ff
        inet 10.141.32.137/18 brd 10.141.63.255 scope global eth0
           valid_lft forever preferred_lft forever
           
           
    ip addr show eth0 |awk -F "inet|/18" 'NR==3 {print $2}'   
    解释:同理
    
    方法三:用不同的分隔符处理
    ifconfig eth0|awk -F " " 'NR==2 {print $2}'
    
    • 搜狐面试题

    处理如下文件内容,将域名取出且根据域名计数排序

    https://www.baidu.com/index.html
    https://sohu.com/index.html
    https://sports.sohu.com/index.html
    https://sports.sohu.com/index2.html
    https://sports.sohu.com/index3.html
    http://it.sohu.com/index.html
    http://it.sohu.com/index2.html
    

    解法:

    awk -F "/" '{print $3}' test_html.txt |sort|uniq -c
    
  • 相关阅读:
    【codeforces 411B】Multi-core Processor
    【codeforces 314C】Sereja and Subsequences
    【hdu 1890】Robotic Sort
    【图灵杯 A】谷神的赌博游戏
    【图灵杯 J】简单的变位词
    【图灵杯 F】一道简单的递推题(矩阵快速幂,乘法模板)
    【图灵杯 E也即POJ 3368】简单的RMQ
    【codeforces 496E】Distributing Parts
    【codeforces 553C】Love Triangles
    Diffie-Hellman Key Exchange – A Non-Mathematician’s Explanation
  • 原文地址:https://www.cnblogs.com/pyyu/p/11603248.html
Copyright © 2011-2022 走看看