LinuxShell——管道命令
LinuxShell——管道命令
摘要:本文主要学习了Shell中的管道命令。
grep命令
grep命令的作用是在文件中提取和匹配符合条件的字符串行,全称是Global Regular Expressions Print。
基本语法
grep [选项] 搜索内容 文件名
选项说明
-A n:n为数字,列出符合条件的行,并列出后续的n行。
-B n:n为数字,列出符合条件的行,并列出前面的n行。
-c:统计找到的符合条件的字符串的次数。
-i:忽略大小写。
-n:输出行号。
-v:反向査找,也就是查询没有关键字的一行。
--color=auto:搜索出的关键字用颜色显示。
使用举例
[root@localhost ~]# cat -n file | grep "hello"
hello
helloword
[root@localhost ~]# cat -n file | grep -c "hello" [root@localhost ~]# cat -n file | grep -n "hello"
: hello
: helloword
[root@localhost ~]# cat -n file | grep -n -A "hello"
: hello
- ss
: helloword
- test123hhhhhhhhh
- ddsdfas
[root@localhost ~]#
sed命令
sed命令是用来处理流的编辑命令,全称是Stream Editor,用程序的方式来编辑文本,它使用预先设定好的编辑指令对输入的文本进行编辑,完成之后再输出编辑结构。
sed会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
基本语法
sed [选项] [范围][脚本] 文件名
选项说明
-n:使用安静模式。默认会将文件的所有内容都输出到屏幕上,使用-n以后只会显示经过处理的内容。
-e 脚本命令:将其后跟的脚本命令添加到已有的命令中。
-f 脚本文件:将其后文件中的脚本命令添加到已有的命令中。
-r:使命令支持扩展元字符的正则表达式,默认支持基础元字符的正则表达式。
-i:直接修改文件内容。
范围说明
范围指的就是sed脚本命令的作用范围,用来表明该脚本命令作用到文本中的具体行。
默认情况下,sed命令会作用于文本数据的所有行。如果只想将命令作用于特定行或某些行,则必须指明范围,表示的方法有以下两种种:
1)以数字形式指定行区间。
当使用数字方式的行寻址时,可以用行在文本流中的行位置来引用。sed会将文本流中的第一行编号为1,然后继续按顺序为接下来的行分配行号。
n:单个数字表示指定第n行作为sed命令的作用范围。
n1,n2:两个数字用“,”分隔表示指定包含第n1行到第n2行的内容作为sed命令的作用范围。
n,$:表示指定范围包含n开始到结束所有内容作为sed命令的作用范围。
2)用文本模式指定具体行区间。
sed允许指定文本模式来过滤出命令要作用的行,必须用“/”将要指定的文本封起来,sed会将该命令作用到包含指定文本模式的行上,多个内容需要被“/”封起来并且使用“,”分隔。
脚本说明
脚本命令a用来在指定行的下一行添加新增的内容:
[范围]a\新内容
脚本命令i用来在指定行的上一行插入新增的内容:
[范围]i\新内容
脚本命令c用来将指定范围的内容替换为新内容:
[范围]c\新内容
脚本命令s用来将指定范围内的指定内容替换成新内容,可以搭配正则表达式使用,也被常用来删除指定的内容:
[范围]s/查询内容/新内容/flags
其中,常用的flags标记:
g:对数据中所有匹配到的内容进行替换,如果没有g,则只会在第一次匹配成功时做替换操作。 p:会打印与替换命令中指定的模式匹配的行。此标记通常与-n选项一起使用。
脚本命令d用来删除指定范围的内容:
[范围]d
脚本命令p用来将选取出来的内容显示在命令行上,通常配合-n使用:
[范围]p
脚本命令w用来将文本中指定范围的内容写入新文件中:
[范围]w 新文件
脚本命令r用来将新文件的数据插入到当前文件的指定范围:
[范围]r 新文件
使用举例
脚本命令a:
[root@localhost ~]# cat -n file | sed '3a\test'
ccccc
bbbbb
dd
test
hello
[root@localhost ~]#
脚本命令i:
[root@localhost ~]# cat -n file | sed '3i\test'
ccccc
bbbbb
test
dd
hello
[root@localhost ~]#
脚本命令c:
[root@localhost ~]# cat -n file | sed '3c\test'
ccccc
bbbbb
test
hello
[root@localhost ~]#
脚本命令s:
[root@localhost ~]# cat -n file | sed '2s/bb/aa/'
ccccc
aabbb
dd
hello
[root@localhost ~]# cat -n file | sed '2s/bb/aa/g'
ccccc
aaaab
dd
hello
[root@localhost ~]#
脚本命令d:
[root@localhost ~]# cat -n file | sed '2d'
ccccc
dd
hello
[root@localhost ~]#
脚本命令p:
[root@localhost ~]# cat -n file | sed -n '2p'
bbbbb
[root@localhost ~]#
脚本命令w:
[root@localhost ~]# cat -n file | sed -n '1,3w test'
[root@localhost ~]# cat test
ccccc
bbbbb
dd
[root@localhost ~]#
脚本命令r:
[root@localhost ~]# cat -n file | sed '1,2r test'
ccccc
ccccc
bbbbb
dd
bbbbb
ccccc
bbbbb
dd
dd
hello
[root@localhost ~]#
awk命令
awk命令也是逐行扫描文件,寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作,反之则不对行做任何处理。
awk命令的名字来源于此命令的设计者,他们的姓分别是Aho、Weingberger和Kernighan,awk就取自这三位大师姓的首字母。
基本语法
awk [选项] [脚本] 文件名
默认情况下,awk会将如下变量分配给它在文本行中发现的数据字段:
$:代表整个文本行。
$:代表文本行中的第1个数据字段。
$:代表文本行中的第2个数据字段。
$n:代表文本行中的第n个数据字段。
前面说过,在awk中,默认的字段分隔符是任意的空白字符(例如空格或制表符)。在文本行中,每个数据字段都是通过字段分隔符划分的。awk在读取一行文本时,会用预定义的字段分隔符划分每个数据字段。
选项说明
-F 分隔符:指定输入行的分隔符,默认分隔符为空格或制表符。
-f 脚本文件:从脚本文件中读取命令,取代在命令行中输入的命令。
-v 变量名=变量值:在执行处理过程之前,设置变量名和变量值。
脚本说明
awk的强大之处在于脚本命令,它由规则和命令两部分组成:
'匹配规则 {执行命令}'
匹配规则用来指定脚本命令可以作用到文本内容中的范围,可以使用字符串或者正则表达式指定。
整个脚本命令是用“''”括起来,而其中的执行命令部分需要用大括号“{}”括起来。
如果没有指定执行命令,则默认会把匹配的行输出。如果没有指定匹配规则,则默认匹配文本中所有的行。
使用举例
使用数据字段变量,输出内容之间使用“,”分隔:
[root@localhost ~]# echo 'Hello Word' | awk '{print $0}'
Hello Word
[root@localhost ~]# echo 'Hello Word' | awk '{print $1, $1$2}'
Hello HelloWord
[root@localhost ~]#
执行多条命令,只要在命令之间使用“;”分隔或者使用回车键分隔即可:
[root@localhost ~]# echo 'Hello Word' | awk '{$2="Hello"; print $0}'
Hello Hello
[root@localhost ~]# echo 'Hello Word' | awk '{$2="Hello"
> print $}'
Hello Hello
[root@localhost ~]#
使用匹配规则指定范围,“/字符串/”表示匹配含有指定字符串或者正则表达式的行,“$0~/字符串/”用来限制符合匹配规则的数据字段:
[root@localhost ~]# awk '$0~/^T.*o/' file
Two lines of test text.
Three lines of test text.
[root@localhost ~]# awk '$1~/Two/' file
Two lines of test text.
[root@localhost ~]#
使用逻辑运算符,匹配规则允许使用逻辑运算符(>、<、>=、<=、==、!=)进行匹配:
[root@localhost ~]# awk '$1=="Two" {print $0}' file
Two lines of test text.
[root@localhost ~]#
BEGIN会强制在命令执行前执行BEGIN后面指定的脚本命令:
[root@localhost ~]# awk 'BEGIN {print "Begin Read File ..."} {print $0}' file
Begin Read File ...
One line of test text.
Two lines of test text.
Three lines of test text.
[root@localhost ~]#
END会强制在命令执行前执行END后面指定的脚本命令:
[root@localhost ~]# awk 'END {print "End Read File ..."} {print $0}' file
One line of test text.
Two lines of test text.
Three lines of test text.
End Read File ...
[root@localhost ~]#
从文件中读取命令,指定分隔符,设定变量:
[root@localhost ~]# cat script
BEGIN {FS=":"} {print $ " -> " v}
[root@localhost ~]# awk -v v=var -f script file
One -> var
Two -> var
Three -> var
[root@localhost ~]#
LinuxShell——管道命令的更多相关文章
- 每天学点Linux命令之Linux-Shell中的数据重定向与管道命令
在Linux shell中, 数据重定向使用 > < 符号,管道命令使用 | 符号链接前后两个命令. 具体区别如下: 数据重定向 1.(>): 左侧应该有标准输出 > 右侧只能 ...
- 常见linux命令释义(第九天)—— Bash Shell 的操作环境Shell 中的管道命令一些管道命令
最近好懒好懒.连写文章都写不好了.于是只能写读一点书,记一点读书笔记了.太懒了,没办法.慢慢恢复自己的状态吧. 管道命令仅会处理strandard output 的内容,对于strandard err ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- grep 和 wc命令 --- !管道命令!
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expr ession Print,表示全局正则表 ...
- Linux系统管道命令符
管道命令符“|”的作用是将前一个命令的标准输出作为后一个命令的标准输入,格式为“命令A | 命令B” 以下实例中,通过grep命令搜索关键字“/sbin/nologin”在/etc/passwd中查找 ...
- linux 管道命令 小记
管道命令(pipe) 使用“|”界定符号 管道命令必须能够接收来自前一个命令的数据成为standard input才能继续处理 1.选取命令:cut, grep.分析数据,取出我们想要的. -cut ...
- Linux下的管道命令有这些:
Linux下的管道命令有这些: 选取命令:cat grep 排序命令:sort wc uniq 双向重定向:tee 字符转换命令: tr, col, join, paste, expand 切割命令: ...
- linux-shell脚本命令之sed
[ sed简单介绍: ] sed是一个非常好的文件处理工具, 它本身是一个管道命令, 以行为单位进行处理, 能够用于对数据行进行新增.选取.替换.删除等操作. sed命令行格式:sed [-nefri ...
- [20180627]测试bbed是否支持管道命令.txt
[20180627]测试bbed是否支持管道命令.txt --//测试bbed是否支持管道命令.txt 1.环境:SCOTT@test01p> @ ver1PORT_STRING ...
随机推荐
- InfluxDB从原理到实战 - 一篇文章搞懂InfluxDB时区
0x00 简介 InfluxDB默认以UTC时间存储并返回时间戳,当接收到一个时序数据记录时,InfluxDB将时间戳从本地时区时间转换为UTC时间并存储,查询时,InfluxDB返回的时间戳对 ...
- (三十六)c#Winform自定义控件-步骤控件-HZHControls
官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...
- C#之Form表单认证
原文地址: https://blog.csdn.net/chadcao/article/details/7859394 ASP.NET的安全认证,共有“Windows”.“Form”.“Passpor ...
- Unity3D_Transform_位置、角度、缩放及其他
1.位置 transforn.position 世界位置 transform.localPosition 相对父类位置 在屏幕左上方显示方法: private void OnGUI() { GUIL ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之一:准备工作
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 【H5最强攻略】百度人脸情绪实时识别
最近看的各位大佬都在体验百度大脑2019年全新上线的24项AI能力! (我也按耐不住了,赶紧走一波- 哈哈) 接下来要介绍的就是H5端的人脸检测攻略. 附带详细的介绍,代码,以及演示体验等 欢迎提出各 ...
- [Go] protobuffer 的环境配置
一般使用gprc是需要使用protobuf作为数据传输的格式标准,可以对要传输的对象结构体进行序列化 先安装protoc,找到对应版本,下载直接把二进制文件复制到环境变量可以访问到的地方就行 http ...
- DNS服务搭建(正反向解析)
版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明. 本文地址链接:https://www.cnblogs.com/wannengachao/p/11954625.html 1.安 ...
- go语言设计模式之proxy
代理模式,单元测试用例真的写得详细, 受教~ proxy.go package proxy import ( //"errors" "fmt" ) type U ...
- 如何解决android 通知栏不显示的问题
android 8.0 以后的版本,在创建通知栏的时候,加了一个channelId的东西.要想在上述版本中显示通知,总共分两步 1.创建Channel if (Build.VERSION.SDK_IN ...