首页 > 系统相关 >shell脚本——文本处理工具

shell脚本——文本处理工具

时间:2023-02-05 09:22:19浏览次数:38  
标签:脚本 文件 shell grep 一行 文本处理 命令 sed awk

 

文本处理工具--grep、sed、awk

  Bash Shell提供了功能强大的文件处理工具:sed(流编辑器stream editor)和awk,都可使用正则表达式进行模式匹配。

而grep又有助于理解sed和awk。

1、grep

Linux系统中grep命令是一种强大的文本搜索、查找过滤工具,,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全

称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep格式:grep [选项] [模式] [文件...],它在一个或多个文件中搜索满足模式的文本行。

常用的grep选项有:
  -c 只输出匹配行的计数。
  -i 不区分大小写(只适用于单字符)。
  -h 查询多文件时不显示文件名。
  -l 查询多文件时只输出包含匹配字符的文件名。
  -n 显示匹配行及行号。
  -s 不显示不存在或无匹配文本的错误信息。
  -v 显示不包含匹配文本的所有行。

eg:(在前一篇正则表达式中已经写到了,这里偷个懒,把昨天的图用一下吧)

 

2、sed

  sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed

的输入,经过一系列编辑命令转换为另一种格式输出。 sed和vi都源于早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相

同的。
sed命令行的基本格式为:
  sed option 'script' file1 file2 ...

  sed option -f scriptfile file1 file2 ...
 sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以多次传入多个文件,sed会依次处理。 sed

的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后用-f参数指定,编辑命令的格式为:

  /pattern/action

  其中pattern是正则表达式,action是编辑操作。 sed程序一行一行读出待处理文件,如果某一行与pattern匹配,则执行相应的action,

如果一条命令没有pattern而只有action,这个action将作用于待处理文件的每一行。

 

sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的行。
命令
  a\ : 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
  c\ :用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每⾏末尾需用”\"续行
  i\ :在当前行之前插入文本。多行时除最后一行外,每行末尾需用”\"续行删除行
  h : 把模式空间里的内容复制到暂存缓冲区
  H : 把模式空间里的内容追加到暂存缓冲区
  g : 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
  G: 把暂存缓冲区的内容追加到模式空间⾥,追加在原有内容的后面
  l : 列出非打印字符
  p : 打印行
  q : 结束或退出sed
  r : 从文件中读取输入行
  ! : 对所选行以外的所有行应用命令
  s : 用一个字符串替换另一个
  g : 在行内进行全局替换
  w : 将所选的行写入文件
  x : 交换暂存缓冲区与模式空间的内容
  y : 将字符替换为另一字符(不能对正则表达式使用y命令)
选项
  -e : 进行多项编辑,即对输入行应用多条sed命令时使用
  -n : 取消默认的输出
  -f :指定sed脚本的文件名



 

 

3、awk

  sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。 awk缺省的行分隔符是换行,缺

省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义,比如/etc/passwd文件的每一行有干个字段,字段之间以:分

隔,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。 awk实际上是一门很复杂的脚本语言,还有像C语言一样的分支和

循环结构,但是基本语法和sed类似,awk命令行的基本形式为:

  awk option 'script' file1 file2 ...


  awk option -f scriptfile file1 file2 ...
  
  和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以

用-f参数指定一个脚本文件,编辑命令的格式为:

  /pattern/{actions}

  和sed类似,pattern是正则表达式,actions是一系列操作。 awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满

足condition条件,则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。

eg:

注:

$0:表示当前行

$1:表示当前行的第一列

$2:表示当前行的第二列

 

标签:脚本,文件,shell,grep,一行,文本处理,命令,sed,awk
From: https://www.cnblogs.com/sj5426/p/17092853.html

相关文章

  • shell脚本——函数与数组
     Shell脚本之函数及数组一、函数函数的作用语句块定义成函数约等于别名,定义函数,再引用函数封装的可重复利用的具体特定功能的代码函数的基本格式法一......
  • shell脚本——变量与条件语句
     文章目录 Shell:一般我们是用图形界面和命令去控制计算机,真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel),由于安全、复杂、繁琐......
  • shell脚本——正则表达式
     LinuxShell脚本之正则表达式一、常见的管道命令sort命令sort命令可针对文本文件的内容,以行为单位来排序格式:sort [选项] 参数常用选项选项  ......
  • SQLGetShell
    SQLGetShell利用sql注入来上传我们的木马后门,连接得到服务器shell确定注入点得到网站目录user='andupdatexml(1,concat(0x7e,@@basedir,0x7e),0)--+&password=asdf&......
  • shell使用嵌套循环跟单层循环打印9×9乘法表
    嵌套循环  单层循环加条件控制语句 ......
  • 第22章 优化可传参脚本
    第22章优化可传参脚本21.1起点我们基于之前章节的代码清单22.1做了小幅修改:我们将输出结果为被选择的对象,而不是格式化之后的表格。代码清单22.1起点:Get-DiskInv......
  • 第21章 你把这叫做脚本
    第21章你把这叫做脚本21.2使得命令可重复执行PowerShell脚本背后的理念,首先是使得重复执行特定命令变得简单,而无须每次手动重复输入命令。此时,我们需要开始使......
  • git推送时(push)shell脚本的行分隔符类型依然是CRLF,没有变成LF
    git的autocrlf设置会在push推的时候把CRLF变成LF,pull拉的时候会把LF变成CRLF(视系统而定),需要注意的一点就是git每次推不会作用于项目全部文件,只作用于检测到变更的文件 ......
  • shell脚本读取MySQL数据库并写入变量
    DB_HOST=...DB_PORT=...DB_USER=...DB_PASSWORD=...DB_NAME=...mysql="mysql-h$DB_HOST-P$DB_PORT-u$DB_USER-D$DB_NAME-s-e"exportMYSQL_PWD=$DB_PASSWORD......
  • shell脚本学习教程(全网最全教学)
     1shell概述1.1什么是ShellShell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便远程远程程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚......