iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux的grep,sed,awk命令怎么用
  • 168
分享到

Linux的grep,sed,awk命令怎么用

2023-06-28 16:06:23 168人浏览 独家记忆
摘要

这篇文章主要介绍了linux的grep,sed,awk命令怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux的grep,sed,awk命令怎么用文章都会有所收获,下面我们一起来看看吧。在Linux系

这篇文章主要介绍了linux的grep,sed,awk命令怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux的grep,sed,awk命令怎么用文章都会有所收获,下面我们一起来看看吧。

在Linux系统中grep,sed,awk被称为三剑客,当你掌握这三个工具时可以大幅度的提高开发效率,grep,sed,awk都是以正则表达式作为基础。

一、正则表达式
 正则表达式:REGular EXPression, REGEXP 元字符: .: 匹配任意单个字符 []: 匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符  字符集合:[:digit:], [:lower:], [:upper:], [:punct:], [:space:], [:alpha:], [:alnum:]     注意:字符集合要用[ ]包含  匹配次数(贪婪模式): *: 匹配其前面的字符任意次   a, b, ab, aab, acb, adb, amnb  a*b, a?b  a.*b   .*: 任意长度的任意字符 \?: 匹配其前面的字符1次或0次 \+:匹配至少一次 \{m,n\}:匹配其前面的字符至少m次,至多n次  \{1,\}  \{0,3\}     备注:至少0次,必须要显示的写出来。  位置锚定: ^: 锚定行首,此字符后面的任意内容必须出现在行首 $: 锚定行尾,此字符前面的任意内容必须出现在行尾 ^$: 空白行  \ \>或\b: 锚定词尾,其前面的任意字符必须作为单词的尾部出现  分组: \(\)  \(ab\)*  后向引用  \1: 引用第一个左括号以及与之对应的右括号所包括的所有内容  \2:  \3:

可以看到标准正则表达的使用过程中,许多符号都需要转义,这在工作中带来了一定的不便,因此扩展的正则表达式便出现了。

二、拓展正则表达式
 1. 字符匹配: . [abc]:包含abc任意一个字符 [^abc]:不包含abc任意一个字符  2. 次数匹配(不用再转义): *:  ?: +: 匹配其前面的字符至少1次 {m,n}  3. 位置锚定: ^ $ \ \>  4. 分组(不用再转义): ():分组 \1, \2, \3, ...  5. 或者 |: or C|cat: C或cat(表示的是整个部分)

可以看到,使用扩展的正则表达式可以省略很多的转义符号,这尤其在写sed语句时极大的提高了代码的可读性。建议优先使用扩展的正则表达式。

三、grep命令家族
3.1. grep相关命令

grep命令家族由grep, egrep, fgrep 三个子命令组成,适用于不同的场景。具体如下: 命令 描述 grep 原生的grep命令,使用“标准正则表达式”作为匹配标准。 egrep 扩展的grep命令,相当于$(grep -E),使用“扩展正则表达式”作为匹配标准。 fgrep 简化版的grep命令,不支持正则表达式,但搜索速度快,系统资源使用率低。

3.2. 使用方法

语法 grep [options] PATTERN [FILE…] options部分 -i:忽略大小写 –color:高亮匹配上的字符串 -v: 显示没有被模式匹配到的行 -o:只显示被模式匹配到的字符串 -E:使用扩展的正则表达式 PATTERN部分 以字符串的方式给定匹配模板,可以使用普通字符串以及正则表达式(标准&扩展)。 FILE部分 需要查找内容的文件。

四、sed命令
4.1. 概述

sed全称是Stream EDitor sed是一个流编辑器、行编辑器

4.2 基本语法

sed [option] ‘script’ [input file]… option部分 -n:不输出模式空间中的内容到stdout -e:可以在sed命令中指定多个script脚本,多点编辑功能 -f:输入sed脚本,脚本中写着编辑命令 -r:支持使用扩展的正则 -i:直接编辑源文件

script部分 地址定界编辑命令(和vim命令相似) 1)空地址:全文编辑 2)单地址:   #:指定某一行,对特定行进行编辑   /pattern/:指定模式匹配到的那一行 3)地址范围:   #,#   #,+#   #,/pattern/   /pattern1/,/pattern2/ 4)步进地址:   1~2:以1为起始行,然后递进2行向下匹配   2~2:所有偶数行 5)编辑命令:   d:删除整行,d放在最后   p:显示模式空间中的内容, 放在最后   a:在匹配的行后面增加文本,使用\n支持多行追加。a放在定界后面   i:在前面加文本。举例:sed ‘3i hello’ xxx   c:替换行为指定的文本。举例:sed ‘3c text’ xxx 把第三行替换成text。sed -i ‘/xyz/c helloworld’ num.txt   w:保存模式空间中匹配的内容到指定位置。举例:sed -n ‘/[#]/w /tmp/demo’ /etc/fstab 将/etc/fstab中非#开头的行保存到/tmp/demo中。   r:读取指定文件的内容添加到当前文件匹配到的行后面,进行文件合并。   !:条件取反。用法:地址定界!编辑命令。   s///:条件替换。 替换标记备注:g(全局替换),p(显示替换成功的行)

替换举例:根据输入查找目录 echo “/var/log/messages” | sed ‘s@/+$/?@@’

4.3.sed高级用法
  1. 模式空间与保持空间 Linux的grep,sed,awk命令怎么用

在模式空间中,完成匹配的操作。当没有匹配上的时候,文本行内容会默认输出stdout;当匹配上文本行的时候,会执行编辑命令,执行结果输出到stdout中。 保持空间可以理解为一个暂存区,只是用于完成额外的动作。

  1. 参数 h:把模式空间中的内容覆盖至保持空间中; H:把模式空间中的内容追加至保持空间中; g:把保持空间中的内容覆盖至模式空间中; G:把保持空间中的内容追加至模式空间中; x:把模式空间中的内容与保持空间中的内容互换; n:覆盖读取匹配到的行的下一行(改变指向)至模式空间中; N:追加读取匹配到的行的下一行(改变指向)至模式空间中; d:删除模式空间中的行; D:删除多行模式空间中的所有行;

 3. 举例 sed -n 'n;p' FILE:显示偶数行; sed '1!G;h;$!d' FILE:逆序显示文件的内容; sed '$!d' FILE:取出最后一行; sed '\$!N;$!D' FILE:取出文件后两行; sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行; sed 'n;d' FILE:显示奇数行; sed 'G' FILE:在原有的每行后方添加一个空白行;
  • 举例:提取字符串

 /bin/bash info="hellozimskyshenzhen" echo $info | sed 's/hello\(\w\+\)shenzhen/\1/g'

备注:

  • sed中不支持\d,如果要用数字用[0-9],但是支持\w。

  • sed中的()要转义,+要转义,大于小于号要转义。

  • 举例:判断是否存在指定格式的字符串

 #!/bin/bash # 判断输入是否为整数 if [ -n "$(echo $1 | sed -n '/^[0-9]\+$/p')" ] ; then   echo 'yes' else   echo 'no' fi
五、awk命令
5.1. awk概述

awk是发明该工具三个作者姓名的首字母简称,awk是一个报表生成器,主要用于格式化输出。格式化文本输出器。

5.2. 基本用法

1. 语法 gawk [option] ‘program’ FILE 其中program: PATTERN{ACTION STATEMENTS} {动作指令}可以理解成为命令,最常用的是print、printf

2. awk读取文档过程 按照行来读取文档,根据输入分隔符切分成小部分(用內建变量来表示1,用来处理。0表示显示整行。

3. 选项option -F:指名输入字段的分隔符; -v:用来实现自定义变量var=value;

4. PATTERN(用于定界)  空:表示处理文件的每一行  /pattern/:使用正则匹配需要处理的行  !/pattern/:上面取反  关系表达式:结果为真假,结果为真的处理,假的不处理。非0非空字符串为真,其余为假。  行定界:不支持直接给出数字的格式(1,2{…})。见举例。  BEGIN/END模式:BEGIN{}表示仅在开始处理文件中的文本之前执行一次的程序,例如打印表头。END{}表示文本处理完成之后执行一次,例如汇总数据。

 举例: awk -F: '$NF=="/bin/bash" {print $1, $NF}' /etc/passwd awk -F: '$NF!"/bash/$"{print $1,$NF}' passwd awk -F: '$3 awk -F; '(NR>=2&&NR awk -F: '{printf "%-15s %10s\n", $1, $2}' /etc/passwd

5. 变量

  • 內建变量(在引用变量时不用加::输入字段分隔符,默认空白字符。使用指定。:输出字段分隔符。使用指定。:输入时的换行符:输出时的换行符:每一行的字段数量。加上NF表示最后一列NR:number of record 文件的行数,打印出来是打印行号 FNR:多个文件中的行数分别计数 FILENAME:当前文件的文件名 ARGC:参数命令行中参数的个数 ARGV**:返回数组,命令行中的每个参数 举例:awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/issue 在这里ARGV[0]是awk,固定为第0个参数。ARGV[1]是/etc/fstab,ARGV[2]是/etc/issue 举例:awk -v FS=’:’ ‘{print $1}’ -v OFS=’:’ /etc/passwd 指名冒号作为输入的分隔符。同awk -F: …

  • 自定义变量 方法1:-v var=value (区分字符的大小写) 方法2:在program中定义

    举例:awk -v test=’hello’ ‘BEGIN {print test}’ awk ‘BEGIN {test=’hello’ print test}’

6. 常用的ACTION命令

  • print 输出格式:print item1,item2 … 备注:使用逗号作为分隔符;输出item可以是字符串、內建变量、awk表达式;若省略item,则显示$0整行;

  • printf 格式化输出:printf FORMAT, item1, item2…按位放在format中。 注意事项:format必须要给出;如需换行,必须要显示写出;format中需要为后面每个item指定格式符;

  • Expressions

  • Control statements:控制语句if,while if(condition){statement} if(condition){statement} else {statements} while(condition) {statements} do {statements} while(condition) for(expr1;expr2;expr3) {statements} break continue delete array[index] delete array删除整个数组 exit 退出语句

  • Compound statements:组合语句

  • Input statements:输入语句

  • Output statements:输出语句 格式符:  %c:显示字符的ASCII值  %d:显示十进制整数  %e:科学计数法数值显示  %f:显示为浮点数  %g:以科学计数法显示浮点数  %s:显示字符串  %u:显示无符号整数  %%:显示%自身 修饰符:  #[.#]:第一个数字用于控制显示字符的宽度,第二个数字表示小数的精度(对于浮点数而言);输出默认右对齐%15s,左对齐:%-15s;+:表示带正负符号; 操作符:  算数操作符:+-/* ; +x把字符串转换成数值;-x改成负数;  字符串操作符:字符串连接(没有操作符)  复制操作符:=,+=,-=,/=,++,–  比较操作符:>, 模式匹配符:  ~:左侧的字符串是否被模式匹配  !~:左侧的字符串是否不能被模式匹配 逻辑操作符:  &&:与  ||:或  !:非 函数调用:  function_name(arg1, arg2, …) 条件表达式:  selector?true_exp:false_exp 和三目运算符一样

  • 操作例子

 # 一般来说, 打印无状态内容放在BEGIN和END块中 awk -v begin="hello" -v end="ok" -F: 'BEGIN{print begin}; {print $1, $NF}; END{print end}' /etc/passwd
5.3. awk高级用法及举例

awk常用内置变量

 $1:表示第一列  $NF:表示最后一列  $NR:表示行号

常用条件表示

1) /指定内容/

这种方式可以匹配到含有“指定内容”的行,在条件中不添加$#所带的项,建议不使用正则,有异常情况。

 awk -F: '/nologin/{print $0}' /etc/passwd #匹配到含有nologin关键字的行  seq 100 | awk '/1/{print $1}'

2) $#=/指定内容/

这种方式指定第#列匹配指定内容

 awk -F: '$1=/bin/{print $0}' /etc/passwd

3) $#~/指定内容/

这种方式用于指定列模糊匹配(正则匹配)指定内容,并获取该行。

 awk -F: '$1~/dae/{print $1}' /etc/passwd  #正向选择  awk -F: '$1!~/dae/{print $1}' /etc/passwd #反向选择

4) 值判断

使用>,=,

 awk -F: '$3>=10{print $1}' /etc/passwd

5) 逻辑判断

使用&&,||来进行逻辑判断。

 awk -F: '$3>=5 && $3

6) if条件判断

 awk -F: '{if ($NF~/nologin$/){i++}else{j++}}; END{print i, j}' /etc/passwd  #注意if-else条件判断是放在{}中的

7) 字典使用

在awk中可以定义数组类型,用于统计。

 awk '{ip[$1]++}; END{for (i in ip) {print i, ip[i]}}' access.log  #解析: 将第一列ip设置为字典的key,当出现一次相同的ip时自增1,用于统计所有的ip计数。  #for循环中取到每个字典对应的key,再使用print块打印出来。注意花括号的隔离。 #QQ号 等级  时长  #统计等级(30  #1234 12 23  #1234 10 122  #1233 92 4212  #1233 42 4252  #1239 87 2313  #1233 56 1121  #1231 19 45  #1235 45 679  cat data | awk '$2>=30&&$2

关于“Linux的grep,sed,awk命令怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Linux的grep,sed,awk命令怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网操作系统频道。

--结束END--

本文标题: Linux的grep,sed,awk命令怎么用

本文链接: https://www.lsjlt.com/news/320608.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux的grep,sed,awk命令怎么用
    这篇文章主要介绍了Linux的grep,sed,awk命令怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux的grep,sed,awk命令怎么用文章都会有所收获,下面我们一起来看看吧。在Linux系...
    99+
    2023-06-28
  • Linux支付命令操作之grep、sed、awk的示例分析
    这篇文章将为大家详细讲解有关Linux支付命令操作之grep、sed、awk的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、grepgrep命令主要用于文本内容的查找。它支持正则表达式查找,命...
    99+
    2023-06-05
  • Shell正则表达式中grep、sed、awk怎么用
    这篇文章主要介绍了Shell正则表达式中grep、sed、awk怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先先复制一段范例:代码如下:# vi regular_e...
    99+
    2023-06-09
  • linux中的sed命令怎么用
    在Linux中,sed命令是一个强大的文本处理工具,用于对文本进行替换、删除、插入、查找等操作。它的使用方法如下:1. 替换文本:`...
    99+
    2023-09-12
    linux
  • linux中Sed命令怎么用
    这篇文章主要介绍linux中Sed命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!sed命令用法sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处...
    99+
    2023-06-09
  • Linux中grep命令怎么用
    小编给大家分享一下Linux中grep命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!介绍Linux系统中grep命令是一种强大的文本搜索工具,它能使用正...
    99+
    2023-06-09
  • Linux grep命令怎么使用
    这篇文章主要介绍了Linux grep命令怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux grep命令怎么使用文章都会有所收获,下面我们一起来看看吧。Linux常用命令grep是一种强大的文本...
    99+
    2023-06-28
  • Linux的awk命令怎么使用
    今天小编给大家分享一下Linux的awk命令怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。awk是一款文本分析工具a...
    99+
    2023-06-28
  • linux中的Awk命令怎么用
    这篇文章主要介绍linux中的Awk命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Awk 是一个强大的工具,可以执行某些可能由其它常见实用程序(包括 sort)来完成的任务。Awk 是个普遍存在的 Unix...
    99+
    2023-06-16
  • linux中awk命令怎么用
    这篇文章给大家分享的是有关linux中awk命令怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。awk是一种模式扫描和处理语言,在对数据进行分析处理时,是十分强大的工具。awk [options] '...
    99+
    2023-06-09
  • Linux常用命令grep怎么用
    这篇文章将为大家详细讲解有关Linux常用命令grep怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux常用命令grep 命令用于查找文件里符合条件的字符串。grep 指令用于查找内容包含指定...
    99+
    2023-06-28
  • Linux系统sed命令怎么用
    这篇文章主要为大家展示了“Linux系统sed命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux系统sed命令怎么用”这篇文章吧。 Sed是一款流编辑工具,用来对文本进行过滤与替...
    99+
    2023-06-28
  • Linux中怎么使用sed命令
    今天小编给大家分享一下Linux中怎么使用sed命令的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。sed是一种在线编辑器,它...
    99+
    2023-06-27
  • Linux中grep命令怎么使用
    grep命令用于在文件中搜索匹配指定模式的文本行。它的基本语法如下: grep [选项] 模式 [文件] 常用的选项包括: `-i...
    99+
    2023-10-24
    Linux
  • linux中怎么使用grep命令
    在Linux中,可以使用grep命令来搜索文件中匹配特定模式的行。其基本语法为:```grep [选项] 模式 [文件名]```其中...
    99+
    2023-08-18
    linux grep
  • Linux重要命之sed命令怎么用
    这篇文章主要为大家展示了“Linux重要命之sed命令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux重要命之sed命令怎么用”这篇文章吧。如何使用sed命令删除文件中的行Sed ...
    99+
    2023-06-05
  • Linux系统的awk命令怎么用
    这篇文章主要介绍“Linux系统的awk命令怎么用”,在日常操作中,相信很多人在Linux系统的awk命令怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统的awk命令怎么用”的疑惑有所帮助!...
    99+
    2023-06-28
  • Linux sed命令的使用
    1.功能简介 sed(Stream EDitor)是一种流文件编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(Pattern Space),接着用sed命令处理缓冲区中的内容...
    99+
    2022-06-03
    Linux sed Linux sed命令
  • sed和awk怎么在Linux中使用
    本篇文章给大家分享的是有关sed和awk怎么在Linux中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。sed用法:sed是一个很好的文件处理工具,本身是一个管道命令,主要...
    99+
    2023-06-09
  • Linux系统sed命令怎么使用
    这篇文章主要讲解了“Linux系统sed命令怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统sed命令怎么使用”吧!我们知道,Vim 采用的是交互式文本编辑模式,你可以用...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作