linux文本三剑客详解

这篇具有很好参考价值的文章主要介绍了linux文本三剑客详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客。

特点:

grep——单纯的查找或匹配文本。

sed——编辑匹配到的文本。

awk——格式化文本,对文本进行较复杂格式处理。

首先了解一下正则表达式:

匹配字符

. 任意单个字符

[] 指定范围的字符

[^] 不在指定范围的字符

次数匹配:

* :匹配前面字符任意次

? : 0 或1次

+ :1 次或多次

{m} :匹配m次 次

{m,n} :至少m ,至多n次

 配置次数

* 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配

.* 任意前面长度的任意字符,不包括0次

\? 匹配其前面的字符0 或 1次

+ 匹配其前面的字符至少1次

{n} 匹配前面的字符n次

{m,n} 匹配前面的字符至少m 次,至多n次

{,n} 匹配前面的字符至多n次

{n,} 匹配前面的字符至少n次

 位置锚定:定位出现的位置


^ : 行首

$ : 行尾

<, \b : 语首

>, \b : 语尾

分组:()

后向引用:\1, \2, ...

 

实例介绍:

grep

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来 。grep也可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。

语法:

grep [options] [pattern] file

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

-i : Linux大小写敏感,忽略字符大小写

-o : 仅显示匹配的字符串本身

-v : 显示没有被匹配的行

-E :支持使用扩展的正则表达式元字符

-q : 静默模式,不输出任何信息

-n : 显示行号

-F : 相当于fgrep,匹配固定字符串的内容。

fgrep : 为固定字符串全局正则表达式打印fgrep(与grep -F相同)是固定的或快速的grep,其行为与grep相同,但不会将任何正则表达式元字符识别为特殊的。搜索将更快完成,因为它只处理简单的字符串而不是复杂的模式。

实例:

1. grep '^a' test.txt -i -n    #查找以a开头的行,显示行号并且忽略大小写。
        'a$'                   #查找以a结尾的行
        'a*'                   #查找a出现一次或者多次行号      

2. grep -v '^$' test.txt       #反向输出所有非空格内容(过滤空行)

3. grep "\.$" test.txt -n      #输出以.为结束的行,\为转义字符,.为特殊字符。
        '^.*c'                 #以任意内容开头, 直到c结束
4. grep "[abc]" test.txt -n -o #匹配abc字符中的任意一个,得到它的行数和行号,只显示被匹配的关键字。
        "[^a]"           -c    #匹配除a以外的字符,显示被匹配了多少行。
        "[a+]"           -n    #+号表示匹配前一个字符1一次或多次.
        "[go?d]"         -n    #匹配god或者good
5. grep -E "(ab)+c" test.txt -n   #匹配ab出现一次或者多次以c结尾的行,并显示行号。
         "go(|o|od)d"             #|或的意思,()将一个或多个字符捆绑一起, 当作一个整体进行处理。
         "(ab){1,3}"              #匹配ab字符一到三次。

sed

 sed 是一种流编辑器,它一次处理一内容。

  处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),

  接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。

  然后读入下行,执行下一个循环。

  如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间

  这样不断重复,直到文件末尾。

  文件内容并没有改变,除非你使用重定向存储输出或-i

  功能:主要用来自动编辑一个或多个文件, 简化对文件的反复操作

 语法: sed` `[options] ``'[地址定界] command'` `file``(s)

 常用的option:

-n :不输出模式空间内容到屏幕,即不自动打印,只打印匹配到的行
-e :多点编辑,对每行处理时,可以有多个Script
-f :把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写
-r :支持扩展的正则表达式
-i :直接将处理的结果写入文件
-i.bak :在将处理的结果写入文件之前备份一份

 

地址定界:

不给地址:对全文进行处理
单地址:
   \#: 指定的行
   /pattern/:被此处模式所能够匹配到的每一行
地址范围:
   \#,#
   \#,+#
   /pat1/,/pat2/
   \#,/pat1/
~:步进
   sed -n '1~2p' 只打印奇数行 (1~2 从第1行,一次加2行)
   sed -n '2~2p' 只打印偶数行

command:

d:删除模式空间匹配的行,并立即启用下一轮循环

p:打印当前模式空间内容,追加到默认输出之后

a:在指定行后面追加文本,支持使用\n实现多行追加

i:在行前面插入文本,支持使用\n实现多行追加

c:替换行为单行或多行文本,支持使用\n实现多行追加

w:保存模式匹配的行至指定文件

r:读取指定文件的文本至模式空间中匹配到的行后

=:为模式空间中的行打印行号

!:模式空间中匹配行取反处理

加g表示行内全局替换;
  在替换时,可以加一下命令,实现大小写转换
  \l:把下个字符转换成小写。
  \L:把replacement字母转换成小写,直到\U或\E出现。
  \u:把下个字符转换成大写。
  \U:把replacement字母转换成大写,直到\L或\E出现。
  \E:停止以\L或\U开始的大小写转换

实例:

1. sed -n '5,19 p' demo           #查看文件demo中5-19行中的内容。
2. sed -n '/^a/ p' demo          #查看以a开头的demo文件的行。
3. sed '2,3 d' demo | head        #将2-5行内容打印出来。
4. sed -e '4 a\abc' demo | head  #在文件passwd上的第四行后面添加abc.
5. sed '2 i\abc' demo | head     #在第二行前插入abc.
6. sed '3 c\abc' demo |head      #将第三行替换为abc.
7. sed -n '5,10 s/bin/aaaa/ p' demo |head   #将passwd的5到10的bin字符串查找出来替换为aaaa。
8. sed -i '1 d' demo             #删除原文件的第一行。
9. sed -i.bak '1 d' demo         #备份

awk

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。

数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。

支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。

awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

语法:

awk ‘BEGIN {commands} pattern {commands}END{commands}' file1

BEGIN:处理数据前执行的命令

END:处理数据后执行的命令

pattern:模式,每一行都执行的命令

BEGIN和END里的命令只是执行一次

pattern里的命令会匹配每一行去处理

awk -F: 'BEGIN{print "第一列"}{print $1} END{print "结束"}' awkdemo
第一列
a
b
c
结束

示例:

1. awk -F ":" '{print $1,$2,$5}' /etc/passwd | head 


    -F ":"  :  awk选项,指定输入分割符为:

    '{print}'    : 固定语法

    $1,$2,$5  :输出第一个,第二个,第五个字段

     : 是输出分隔符,如果不加默认是没有分隔符的。

2. echo 'this is a test' | awk '{print $0}'
   this is a test

3. echo 'this is a test' | awk '{print $NF}'
  test                         #$NF表示最后一个字段,$(NF-1)表示倒数第二个字段。

4. cat awkdemo
 a:b
 c:d

 awk -v FS=':' '{print $1,$2}' demo  #FS指定输入分隔符
 a b
 c d


5. awk -v FS=':' -v OFS='---' '{print $1,$2}' demo  #OFS指定输出分隔符
 a---b
 c---d

6. awk -v RS=':' '{print $1,$2}' demo
 a
 b c
 d

7. awk -v FS=':' -v ORS='---' '{print $1,$2}' demo
a b---c d


8. awk '{print FILENAME}' demo1
demo1

9. awk 'BEGIN {print ARGC}' demo 
2
10. awk 'BEGIN {print ARGV[0]}' demo1 
awk
    awk 'BEGIN {print ARGV[1]}' demo1
demo1

       

内置变量

  • FS :输入字段分隔符,默认为空白字符

  • OFS :输出字段分隔符,默认为空白字符

  • RS :输入记录分隔符,指定输入时的换行符,原换行符仍有效

  • ORS :输出记录分隔符,输出时用指定符号代替换行符

  • NF :字段数量,共有多少字段, $NF引用最后一列,$(NF-1)引用倒数第2列

  • NR :行号,后可跟多个文件,第二个文件行号继续从第一个文件最后行号开始

  • FNR :各文件分别计数, 行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始

  • FILENAME :当前文件名

  • ARGC :命令行参数的个数

  • ARGV :数组,保存的是命令行所给定的各参数,查看参数

自定义变量:-v var=value

awk -v name="mmm" -F: '{print name":"$0}' demo
mmm:a:b
mmm:c:d

内置函数,方便对原始数据的处理。

$ awk -F ':' '{ print toupper($1) }' demo.txt

 

  • tolower():字符转为小写。

  • length():返回字符串长度。

  • substr():返回子字符串。

  • sin():正弦。

  • cos():余弦。

  • sqrt():平方根。

  • rand():随机数。

awk -F ':' '/usr/ {print $1}' demo.txt
#print命令前面是一个正则表达式,只输出包含usr的行。
awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt
#输出奇数行
 awk -F ':' 'NR >3 {print $1}' demo.txt
 #输出第三行后的行
 awk -F ':' '$1 == "root" {print $1}' demo.txt
​
 awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt
 
 #输出第一个字段等于指定值的行。
awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo.txt
#使用if语句

操作符:

1. df -h |awk -F: '$0 ~ /^\/dev/' /dev/mapper/cl-root
#查询以/dev开头的磁盘信息
模式匹配符:~ :左边是否和右边匹配包含  
          !~ :是否不匹配
2. awk -F: '$3>=0 && $3<=10 {print $1,$3}' /aaa
 
3. awk -F: '$3==0 || $3>=10 {print $1}' /aaa
   
其他操作符

1.算术操作符:

   x+y, x-y, x*y, x/y, x^y, x%y
   -x:  转换为负数
   +x:  转换为数值

2.赋值操作符:

   =, +=, -=, *=, /=, %=, ^=, ++, --

3.比较操作符:

   ==, !=, >, >=, <, <=


linux三剑客,linux,服务器,运维文章来源地址https://www.toymoban.com/news/detail-853073.html

到了这里,关于linux文本三剑客详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux文本三剑客---grep,sed,awk

    目录 grep 什么是grep? grep实例演示 命令参数: 案例演示: sed 概念:  常用选项: 案例演示: awk 概念: awk常用命令选项: awk变量: 内置变量 自定义变量 awk的简单案例 在“a b c d”的d后面插入三个字符 统计tcp连接状态数量  统计日志中状态码非200的IP的次数 什么是grep?

    2024年02月13日
    浏览(58)
  • Linux文本三剑客---grep、sed、awk

    awk、grep、sed是linux操作文本的三大利器,三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。 1、grep 1.1 命令格式 1.2命令功能

    2024年02月14日
    浏览(53)
  • Linux文本三剑客(grep、sed、awk)

    目录 grep 1、什么是grep和rgrep? 2、使用grep 2.1、命令格式 2.2、命令功能 2.3、命令参数 3、实战演示 sed 1、认识sed 2、使用sed 2.1、命令格式 2.2、常用选项options 2.3、地址定界 2.4、编辑命令command 3、sed用法演示 3.1、常用选项用法演示 3.2、sed地址定界演示 3.3、编辑命令command演示

    2024年02月03日
    浏览(52)
  • Linux 文本处理三剑客:grep、sed 和 awk

    awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较

    2024年01月17日
    浏览(61)
  • Linux:管道命令与文本处理三剑客(grep、sed、awk)

    众所周知,bash命令执行的时候会输出信息,但有时这些信息必须要经过几次处理之后才能得到我们想要的格式,此时应该如何处置?这就牵涉到 管道命令(pipe) 了。管道命令使用的是 | 这个界定符号。另外,管道命令与连续执行命令是不一样的,这点下面我们会说明。 我们先

    2023年04月18日
    浏览(53)
  • Linux 三剑客命令之 awk 详解

    目录 一、Awk 实战讲解 1.1 awk 的原理 1.2 BEGIN 和 END 模块 1.3 运算符 1.4 常用 awk 内置变量 1.5 awk 正则 1.6 awk 常用字符串函数         awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中

    2024年02月03日
    浏览(159)
  • Linux三剑客——Linux grep命令详解:查找文件内容

    很多时候,我们并不需要列出文件的全部内容,而是从文件中找到包含指定信息的那些行,要实现这个目的,可以使用 grep 命令。 grep 命令 作为 Linux 文本处理三剑客的一员,另外两个是 sed 和 awk ,我们会在后面的文章中作详细介绍。 grep 命令 的由来可以追溯到 UNIX 诞生的

    2024年02月11日
    浏览(58)
  • 文本三剑客之 awk

    Linux/UNIX 系统中,awk 是一个功能强大的编辑工具。逐行读取输入文本 以空格作为分割符,多个空格他会自动压缩成一个空格 AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理. 1按照命令找指定的行  2.找到的行 打印,操作 awk

    2024年02月08日
    浏览(41)
  • 文本三剑客之~~~sed命令

    sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。 包括读取,执行和显示三个过程 读取:sed从输入流(文件,管道

    2024年02月05日
    浏览(41)
  • 文本三剑客&正则表达式2

    主要是对文件内容按照行的方式进行增删改查 工作流程 sed的工作流程主要包括** 读取、执行和显示 **三个过程 读取 sed从 输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space ) 执行 默认情况下,所有的sed命令都在模式空间中

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包