Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux三剑客入门

Linux三剑客入门

作者头像
超蛋lhy
发布于 2019-09-29 09:19:59
发布于 2019-09-29 09:19:59
1.3K00
代码可运行
举报
文章被收录于专栏:PythonistaPythonista
运行总次数:0
代码可运行

grep文本过滤工具

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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grep [options] [pattern]  [file]

命令  参数   匹配模式   文件数据

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

参数选项

解释说明

-v

排除匹配结果

-n

显示匹配行与行号

-i

不区分大小写

-c

只统计匹配的行数

-E

使用egrep命令

--color=auto

为grep过滤结果添加颜色

-w

只匹配过滤的单词

-o

只输出匹配的内容

案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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是操作、过滤和转换文本内容的强大工具。常用功能包括对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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代表全局匹配

案例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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\ndadada'  student.txt #在第二行下面,添加多行数据
sed '1,2d'  student.txt               #删除12行
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            #显示13行的内容
sed '11,$d'  student.txt                #删除11行一直到文件结尾

awk基础入门

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

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

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk [option] 'pattern{action}' file ..
命令 参数           '条件{动作}'  文件..

参数:

参数

解释

-F

指定字段分割

-v

定义或修改awk内部变量

案例:

  • awk的条件 NR表示行号,NR==5表示第五行
  • awk后面内容请使用单引号,双引号有特殊解析
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk 'NR==2,NR==5' test_grep.txt         #显示第25行之间的内容

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk -F ":" '{print NR,$1,$3,$NF}' test_grep.txt     
解释:-F 指定分隔符,以冒号分割
'{print NR,$1,$3,$NF}'  打印出NR行号,$1第一列 $3第三列  $NF最后一列,注意$0表示整行
  • awk的替换查找函数,gsub()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '{gsub("bin","BIN",$0);print $0}' test_grep.txt  
解释:gsub("想替换的内容","替换后的内容",在一整行都替换;显示替换后的整行结果)
  • 取出网卡的ip地址,注意每台机器的信息不一样
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
方法一:[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}'
  • 搜狐面试题

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

解法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk -F "/" '{print $3}' test_html.txt |sort|uniq -c
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
当我们谈论Monad的时候(二)
在上一篇文章中,我通过几个Java的例子简单的说明了Monad的本质和一些工程中常见的用途。接下来的文章就不再侧重于工程了,而是要慢慢向理论转换。而作为过渡,我选择了Haskell来代替Java进行说明。本篇文章默认读者已经对Haskell的基本语法有所了解,因此对此类内容我不会再做赘述。
KAAAsS
2022/01/14
9060
newtype_Haskell笔记8
在List场景,xs <*> ys表示从左侧xs中取出函数作用于右侧ys中的每一项,有两种实现方式:
ayqy贾杰
2019/06/12
6900
Monadic Function_Haskell笔记12
只是把context换成了Monad而已,此外没什么区别。并且对于遵守Functor laws和Monad laws的类型,这两个函数是完全等价的,例如:
ayqy贾杰
2019/06/12
9660
Monad_Haskell笔记10
从类型来看,Functor到Applicative再到Monad是从一般到特殊的递进过程(Monad是特殊的Applicative,Applicative是特殊的Functor)
ayqy贾杰
2019/06/12
8320
Kotlin版图解Functor、Applicative与Monad
这很简单。 那么扩展一下,我们说任何值都可以放到一个上下文中。 现在你可以把上下文想象为一个可以在其中装进值的盒子:
bennyhuo
2020/02/20
1.3K0
Applicative 函子
Application 函子是一种加强的函子,在 Haskell 的 Control.Applicative 模块中定义了一个 Applicative 类型类:
Sheepy
2018/09/10
7750
Functors, Applicatives, And Monads In PicturesFunctors, Applicatives, And Monads In Pictures
原文: http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html 参考文章: http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf
一个会写诗的程序员
2018/12/12
6130
来看看几种 Monad来看看几种 Monad
https://learnyoua.haskell.sg/content/zh-cn/ch12/a-fistful-of-monads.html
一个会写诗的程序员
2018/12/12
1.1K0
Haskell 自定义type与typeclass
那么如何解读上面的表达式呢? 首先data关键字后边的BookInfo是新类型的名字,我们称BookInfo为*类型构造器*。类型构造器用于指代(refer)类型。类型名字的首字母必须大写,因此类型构造器的首字母也必须大写。 接下来的Book是*值构造器*(或者称:*数据构造器*)的名字,类型的值就是由值构造器创建的。 Book之后的Int String [String] 是类型的组成部分 在这个例子中,Int表示书ID, String表示书名,[String]表示作者
Orlion
2024/09/02
1520
铁定不纯的IO_Haskell笔记5
一直有个疑惑,Haskell号称纯函数式语言,那么铁定不纯的场景(肯定有副作用,或者操作本身就是副作用)如何解决?
ayqy贾杰
2019/06/12
1.4K0
深入typeclass_Haskell笔记4
OOP中的Class是对象模板,用来描述现实事物,并封装其内部状态。FP中没有内部状态一说,所以Class在函数式上下文指的就是接口。派生自某类(deriving (SomeTypeclass))是说具有某类定义的行为,相当于OOP中的实现了某个接口,所以具有接口定义的行为
ayqy贾杰
2019/06/12
5440
让Monad来得更猛烈些吧_Haskell笔记11
最早接触过IO Monad,后来又了解了Maybe Monad和List Monad,实际上还有很多Monad(比如Writer Monad、Reader Monad、State Monad等),位于mtl package,可以通过ghc-pkg命令来查看:
ayqy贾杰
2019/06/12
1.6K0
Js-函数式编程 前言什么是函数式编程为什么Js支持FP纯函数柯里化组合 compose范畴学functorMonadApplicative FunctorFunctor\Monad\Applic
JavaScript是一门多范式语言,即可使用OOP(面向对象),也可以使用FP(函数式),由于笔者最近在学习React相关的技术栈,想进一步深入了解其思想,所以学习了一些FP相关的知识点,本文纯属个人的读书笔记,如果有错误,望轻喷且提点。
菜的黑人牙膏
2019/04/09
1.8K0
Js-函数式编程
		前言什么是函数式编程为什么Js支持FP纯函数柯里化组合 compose范畴学functorMonadApplicative FunctorFunctor\Monad\Applic
什么是 Monad (Functional Programming)?函子到底是什么?ApplicativeMonad
函数式编程的精髓就在于,我们可以用好多好多小小函数,搭搭搭,组成一个个大函数,最终写出整个程序来。比如我们想写一个函数
一个会写诗的程序员
2018/12/12
4.6K0
Scalaz(7)- typeclass:Applicative-idomatic function application
    Applicative,正如它的名称所示,就是FP模式的函数施用(function application)。我们在前面的讨论中不断提到FP模式的操作一般都在管道里进行的,因为FP的变量表达形
用户1150956
2018/01/05
9650
基础语法_Haskell笔记1
Haskell是一种纯函数式语言(purely functional programming language),其函数式特性的纯度没有争议
ayqy贾杰
2019/06/12
2K0
用 350 行代码从零开始,将 Lisp 编译成 JavaScript
我们将会在本篇文章中看到从零开始实现的编译器,将简单的类 LISP 计算语言编译成 JavaScript。完整的源代码在 这里。
用户8639654
2021/10/25
1.1K0
泛函编程(26)-泛函数据类型-Monad-Applicative Functor Traversal
    前面我们讨论了Applicative。Applicative 就是某种Functor,因为我们可以用map2来实现map,所以Applicative可以map,就是Functor,叫做Appl
用户1150956
2018/01/05
8970
Scalaz(6)- typeclass:Functor-just map
  Functor是范畴学(Category theory)里的概念。不过无须担心,我们在scala FP编程里并不需要先掌握范畴学知识的。在scalaz里,Functor就是一个普通的typecla
用户1150956
2018/01/05
8450
Java示例演示Functor 和monad
This article was initially an appendix in our Reactive Programming with RxJavabook. However introduction to monads, albeit very much related to reactive programming, didn't suit very well. So I decided to take it out and publish separately as a blog post.
Dylan Liu
2019/07/01
6500
推荐阅读
相关推荐
当我们谈论Monad的时候(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验