LinuxShell——管道命令

LinuxShell——管道命令

摘要:本文主要学习了Shell中的管道命令。

grep命令

grep命令的作用是在文件中提取和匹配符合条件的字符串行,全称是Global Regular Expressions Print。

基本语法

1 [[email protected] ~]# grep [选项] 搜索内容 文件名

选项说明

1 -A n:n为数字,列出符合条件的行,并列出后续的n行。
2 -B n:n为数字,列出符合条件的行,并列出前面的n行。
3 -c:统计找到的符合条件的字符串的次数。
4 -i:忽略大小写。
5 -n:输出行号。
6 -v:反向査找,也就是查询没有关键字的一行。
7 --color=auto:搜索出的关键字用颜色显示。

使用举例

 1 [[email protected] ~]# cat -n file | grep "hello"
 2      4    hello
 3      6    helloword
 4 [[email protected] ~]# cat -n file | grep -c "hello"
 5 2
 6 [[email protected] ~]# cat -n file | grep -n "hello"
 7 4:     4    hello
 8 6:     6    helloword
 9 [[email protected] ~]# cat -n file | grep -n -A 3 "hello"
10 4:     4    hello
11 5-     5    ss
12 6:     6    helloword
13 7-     7    test123hhhhhhhhh
14 8-     8    ddsdfas
15 [[email protected] ~]# 

sed命令

sed命令是用来处理流的编辑命令,全称是Stream Editor,用程序的方式来编辑文本,它使用预先设定好的编辑指令对输入的文本进行编辑,完成之后再输出编辑结构。

sed会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

基本语法

1 [[email protected] ~]# sed [选项] [范围][脚本] 文件名

选项说明

1 -n:使用安静模式。默认会将文件的所有内容都输出到屏幕上,使用-n以后只会显示经过处理的内容。
2 -e 脚本命令:将其后跟的脚本命令添加到已有的命令中。
3 -f 脚本文件:将其后文件中的脚本命令添加到已有的命令中。
4 -r:使命令支持扩展元字符的正则表达式,默认支持基础元字符的正则表达式。
5 -i:直接修改文件内容。

范围说明

范围指的就是sed脚本命令的作用范围,用来表明该脚本命令作用到文本中的具体行。

默认情况下,sed命令会作用于文本数据的所有行。如果只想将命令作用于特定行或某些行,则必须指明范围,表示的方法有以下两种种:

1)以数字形式指定行区间。

当使用数字方式的行寻址时,可以用行在文本流中的行位置来引用。sed会将文本流中的第一行编号为1,然后继续按顺序为接下来的行分配行号。

1 n:单个数字表示指定第n行作为sed命令的作用范围。
2 n1,n2:两个数字用“,”分隔表示指定包含第n1行到第n2行的内容作为sed命令的作用范围。
3 n,$:表示指定范围包含n开始到结束所有内容作为sed命令的作用范围。

2)用文本模式指定具体行区间。

sed允许指定文本模式来过滤出命令要作用的行,必须用“/”将要指定的文本封起来,sed会将该命令作用到包含指定文本模式的行上,多个内容需要被“/”封起来并且使用“,”分隔。

脚本说明

脚本命令a用来在指定行的下一行添加新增的内容:

1 [范围]a\新内容

脚本命令i用来在指定行的上一行插入新增的内容:

1 [范围]i\新内容

脚本命令c用来将指定范围的内容替换为新内容:

1 [范围]c\新内容

脚本命令s用来将指定范围内的指定内容替换成新内容,可以搭配正则表达式使用,也被常用来删除指定的内容:

1 [范围]s/查询内容/新内容/flags

其中,常用的flags标记:

1 g:对数据中所有匹配到的内容进行替换,如果没有g,则只会在第一次匹配成功时做替换操作。2 p:会打印与替换命令中指定的模式匹配的行。此标记通常与-n选项一起使用。

脚本命令d用来删除指定范围的内容:

1 [范围]d

脚本命令p用来将选取出来的内容显示在命令行上,通常配合-n使用:

1 [范围]p

脚本命令w用来将文本中指定范围的内容写入新文件中:

1 [范围]w 新文件

脚本命令r用来将新文件的数据插入到当前文件的指定范围:

1 [范围]r 新文件

使用举例

脚本命令a:

1 [[email protected] ~]# cat -n file | sed ‘3a\test‘
2      1    ccccc
3      2    bbbbb
4      3    dd
5 test
6      4    hello
7 [[email protected] ~]#

脚本命令i:

1 [[email protected] ~]# cat -n file | sed ‘3i\test‘
2      1    ccccc
3      2    bbbbb
4 test
5      3    dd
6      4    hello
7 [[email protected] ~]#

脚本命令c:

1 [[email protected] ~]# cat -n file | sed ‘3c\test‘
2      1    ccccc
3      2    bbbbb
4 test
5      4    hello
6 [[email protected] ~]# 

脚本命令s:

 1 [[email protected] ~]# cat -n file | sed ‘2s/bb/aa/‘
 2      1    ccccc
 3      2    aabbb
 4      3    dd
 5      4    hello
 6 [[email protected] ~]# cat -n file | sed ‘2s/bb/aa/g‘
 7      1    ccccc
 8      2    aaaab
 9      3    dd
10      4    hello
11 [[email protected] ~]#

脚本命令d:

1 [[email protected] ~]# cat -n file | sed ‘2d‘
2      1    ccccc
3      3    dd
4      4    hello
5 [[email protected] ~]# 

脚本命令p:

1 [[email protected] ~]# cat -n file | sed -n ‘2p‘
2      2    bbbbb
3 [[email protected] ~]# 

脚本命令w:

1 [[email protected] ~]# cat -n file | sed -n ‘1,3w test‘
2 [[email protected] ~]# cat test
3      1    ccccc
4      2    bbbbb
5      3    dd
6 [[email protected] ~]# 

脚本命令r:

 1 [[email protected] ~]# cat -n file | sed ‘1,2r test‘
 2      1    ccccc
 3 ccccc
 4 bbbbb
 5 dd
 6      2    bbbbb
 7 ccccc
 8 bbbbb
 9 dd
10      3    dd
11      4    hello
12 [[email protected] ~]# 

awk命令

awk命令也是逐行扫描文件,寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作,反之则不对行做任何处理。

awk命令的名字来源于此命令的设计者,他们的姓分别是Aho、Weingberger和Kernighan,awk就取自这三位大师姓的首字母。

基本语法

1 [[email protected] ~]# awk [选项] [脚本] 文件名

默认情况下,awk会将如下变量分配给它在文本行中发现的数据字段:

1 $0:代表整个文本行。
2 $1:代表文本行中的第1个数据字段。
3 $2:代表文本行中的第2个数据字段。
4 $n:代表文本行中的第n个数据字段。

前面说过,在awk中,默认的字段分隔符是任意的空白字符(例如空格或制表符)。在文本行中,每个数据字段都是通过字段分隔符划分的。awk在读取一行文本时,会用预定义的字段分隔符划分每个数据字段。

选项说明

1 -F 分隔符:指定输入行的分隔符,默认分隔符为空格或制表符。
2 -f 脚本文件:从脚本文件中读取命令,取代在命令行中输入的命令。
3 -v 变量名=变量值:在执行处理过程之前,设置变量名和变量值。

脚本说明

awk的强大之处在于脚本命令,它由规则和命令两部分组成:

1 ‘匹配规则 {执行命令}‘

匹配规则用来指定脚本命令可以作用到文本内容中的范围,可以使用字符串或者正则表达式指定。

整个脚本命令是用“‘‘”括起来,而其中的执行命令部分需要用大括号“{}”括起来。

如果没有指定执行命令,则默认会把匹配的行输出。如果没有指定匹配规则,则默认匹配文本中所有的行。

使用举例

使用数据字段变量,输出内容之间使用“,”分隔:

1 [[email protected] ~]# echo ‘Hello Word‘ | awk ‘{print $0}‘
2 Hello Word
3 [[email protected] ~]# echo ‘Hello Word‘ | awk ‘{print $1, $1$2}‘
4 Hello HelloWord
5 [[email protected] ~]# 

执行多条命令,只要在命令之间使用“;”分隔或者使用回车键分隔即可:

1 [[email protected] ~]# echo ‘Hello Word‘ | awk ‘{$2="Hello"; print $0}‘
2 Hello Hello
3 [[email protected] ~]# echo ‘Hello Word‘ | awk ‘{$2="Hello"
4 > print $0}‘
5 Hello Hello
6 [[email protected] ~]# 

使用匹配规则指定范围,“/字符串/”表示匹配含有指定字符串或者正则表达式的行,“$0~/字符串/”用来限制符合匹配规则的数据字段:

1 [[email protected] ~]# awk ‘$0~/^T.*o/‘ file
2 Two lines of test text.
3 Three lines of test text.
4 [[email protected] ~]# awk ‘$1~/Two/‘ file
5 Two lines of test text.
6 [[email protected] ~]# 

使用逻辑运算符,匹配规则允许使用逻辑运算符(>、<、>=、<=、==、!=)进行匹配:

1 [[email protected] ~]# awk ‘$1=="Two" {print $0}‘ file
2 Two lines of test text.
3 [[email protected] ~]# 

BEGIN会强制在命令执行前执行BEGIN后面指定的脚本命令:

1 [[email protected] ~]# awk ‘BEGIN {print "Begin Read File ..."} {print $0}‘ file
2 Begin Read File ...
3 One line of test text.
4 Two lines of test text.
5 Three lines of test text.
6 [[email protected] ~]#

END会强制在命令执行前执行END后面指定的脚本命令:

1 [[email protected] ~]# awk ‘END {print "End Read File ..."} {print $0}‘ file
2 One line of test text.
3 Two lines of test text.
4 Three lines of test text.
5 End Read File ...
6 [[email protected] ~]# 

从文件中读取命令,指定分隔符,设定变量:

1 [[email protected] ~]# cat script
2 BEGIN {FS=":"} {print $1 " -> " v}
3 [[email protected] ~]# awk -v v=var -f script file
4 One -> var
5 Two -> var
6 Three -> var
7 [[email protected] ~]# 

原文地址:https://www.cnblogs.com/shamao/p/11209391.html

时间: 2024-12-15 20:11:35

LinuxShell——管道命令的相关文章

linux-shell脚本命令之sed

[ sed简介: ] sed是一个很好的文件处理工具, 它本身是一个管道命令, 以行为单位进行处理, 可以用于对数据行进行新增.选取.替换.删除等操作. sed命令行格式:sed [-nefri] 'range command' file 如: sed '2d' aaa.txt                                   # 删除文件aaa.txt中第二行 [ sed工作流程: ] 使用vim这种屏幕编辑器编辑一个文件的时候, 我们需要把这个文件打开, 这里存在两个问题:

管道命令总结

管道命令 概念 管道命令只会处理stdout,忽略stderr 管道命令后面接的第一个数据必定是命令,这个命令必须能够接收stdin 选取命令 作用:取出我们想要的数据          cut 用途:将一行信息的某一段切出来 缺点:处理多空格相连的数据比较差                    cut -d '分隔字符' -f fields -d               后面接分割字符,与-f一起使用 -f                依据-d将一段信息切割成数段,用-f取出第几段 例

Linux基础篇四———管道命令

管道命令 如果我们的数据必须经过"几道手续"之后才能够得到我们想要的格式那么我们必须使用pipe命令来解决这个问题 **管道命令和连续执行命令是不一样的 我们来看一下管道命令的处理信息流程 管道命令的应用 1.cut **用于选取部分数据 -d:规定分隔符 -f:依据-d分隔之后所选取的数据段 -c:规定以字符为单位分割接数字来取到置顶位置数据. **cut的主要用途在于将同一行数据进行分解 2.grep **用于分析一行数据 -a: 将二进制文件以text文件的方式查找数据 -c:计

linux shell 管道命令(pipe)使用及与shell重定向区别

linux shell 管道命令(pipe)使用及与shell重定向区别 看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令操作符是:"|",它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力.然后,传递给下一个命令,作为标准的输入 st

管道命令&#39;|&#39;

管道符号,是unix功能强大的一个地方,符号是一条竖线:"|", 用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2, 例如: ls -l | more 该命令列出当前目录中的任何文档,并把输出送给more命令作为输入,more命令分页显示文件列表. 管道命令'|'

linux-shell脚本命令之grep

[ grep简介: ] grep是用来过滤含有特定字符的行 用法: grep 'pattern' file 例如: grep 'bbb' aaa.txt --color                     # 从文件aaa.txt中搜索关键词bbb, 并高亮显示. [ 正则元字符: ] grep可以结合正则表达式使用, 下面介绍一些常用的正则表达式过滤字符的用法. 1.  ^表示行开头 grep   '^bbb'   aaa.txt  --color                 # 从文

管道命令的使用

bash命令执行的时候有输出数据,如果这群数据比寻经过几道手续之后才能得到我们所需要的格式,就涉及到管道命令(pipe),管道命令使用"|"这个界定符号,另外管道命令和连续执行命令是不一样的. 管道命令"|"仅能够处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error并没有直接处理的能力.在每个管道后面接的第一个数据必定是命令,而且这个命令必须能够接收standard input的数据才行,这样的命令才可以是

数据流重定向和管道命令(bash学习02)

标准输入输出和错误 标准输入(stdin) 是指令数据的输入,代码为0,使用<或者<<,默认是键盘 标准输出(stdout)是指令执行成功返回的结果,代码为1,使用>或者>>,默认由屏幕显示 标准错误输出(stderr)是指令执行失败返回的错误信息,代码为2,使用2>或者2>>,默认是屏幕 < 指定输入的数据媒介来源1> 将正确的内容 覆盖输出到指定的媒介1>> 将正确的内容 追加到指定的媒介2> 将错误信息覆盖输出到指定

谈谈Linux下的数据流重定向和管道命令

一.标准输入.标准输出.错误输出概述 1.标准输入(stdin)是指令数据的输入,代码为0,使用<或者<<,默认是键盘. 2.标准输出(stdout)是指令执行成功返回的结果,代码为1,使用>或者>>,默认在屏幕显示. 3.标准错误输出(stderr)是指令执行失败返回的错误信息,代码为2,使用2>或者2>>,默认是屏幕. 二.数据流重定向的使用      1."<":指定输入的数据媒介来源(tr 'a-z' 'A-Z' &l