Linux正则表达式sed、awk

sed介绍

     Sed是一个流处理编辑器,它能帮助我们自动处理文件、分析日志文件、修改配置文件等。

     Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件

多行的内容

  • 可以不对原文件改动,把整个文件输出到屏幕

  • 可以把匹配到的内容输出到屏幕上

  • 还可以对原文件改动,但是不会再屏幕上返回结果

sed 参数

sed [-hnV] [-e<script>] [-f<script文件>] [文本文件]

  • -e <script>或--expression=<script>以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或--file=<script文件>以选项中指定的script文件来处理输入的文本文件。
  • -h或--help 显示帮助。
  • -n或--quiet或--silent仅显示script处理后的结果。
  • -V或--version显示版本信息。

sed 动作

可以理解为操作

  • a : 新增,a的后面可以接字串,新增字符串会在目前的下一行
  • c∶取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行
  • d : 删除,因为是删除,所以d通常写在最后
  • i : 插入,i的后面可以接字串,新增字串会在目前的上一行
  • p : 打印,将某个选择的数据显示出。通常p会与参数sed -n一起运行
  • s : 替换,可以直接进行替换。通常这个s 的动作可以搭配正则表示。例如1,20s/old/new/g(是不是和vim的替换很像?)

在文件中添加第三行,内容为hello

sed -e '2a hello world' sed.test

 

删除行,删除2到3行

cat -n sed.test | sed -e '2,3d'

 

删除包含22222的行

cat sed.test | sed '/22222/d'

替换行

将1-2行替换为hahaha

cat -n sed.test | sed '1,2c hahaha'

 

查找并替换字符串

 将示例文本的中Hello换成Haha

sed 's\hello\haha\g' sed.test

前面的一系列操作,只是在屏幕上按要求输出了内容,而文件本身并没有改变

sed也可以用于文件自身的修改。但这样操作非常危险,有可能误操作将文件改坏,所以我们要在有充足把握的情况下才能这样使用

结合-i和查找替换即可修改文件,上例中加-i即可

awk

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。它支持用户自定义函数和动态正

则表达式等功能,是linux/unix下的一个强大编程工具。awk命名来自于三位创始人Alfred Aho,

Peter Weinberger,和BrianKernighan的Family Name的首字符。

 awk格式

命令行格式:

awk [选项参数] 'script var=value file(s)

awk 内嵌参数

内置变量1:

$0:表示整个当前行

$1:每行第一个字段

 内置变量2:

NR:每行的记录号,行号

NF:字段数量变量,字段总数

FILENAME:正在处理的文件名

分割,显示/etc/passwd的第一列,即用户名

cat /etc/passwd | awk -F : '{print $1}'

 

匹配某段字符

cat /etc/passwd | awk -F : '$1 ~ /oo/'

显示/etc/passwd的前五行,显示每行的行号、列数,以及该行完整的内容

head -n5 /etc/passwd | awk -F : '{print NR " " NF " " $0}'

 条件操作匹配

cat /etc/passwd | awk -F : '$3=="0"'

 

 这里操作符号可以用==、>.>= .< . <=. != 都是可行

和数字比较时,将数字要用双引号“”引起来,表示字符串,不加引号则表示数字

cat /etc/passwd | awk -F: "$3>="1000""

Guess you like

Origin blog.csdn.net/weixin_64338385/article/details/121534425