vim和sed、awk之间的区别:

vim命令是交互式的,sed和awk是非交互式的。比如vim需要i来插入,需要wq来保存退出

vim命令使文件操作模式,sed和awk是行操作模式。

sed命令:

1.sed作用

sed一般用于对文本内容做替换(不一定非用/分割,任意字符都可以):

如sed '/usr1/s/usr1/u1/' /etc/passwd

2.sed的模式空间

sed的基本工作方式为:

将文件的每一行读取到内存(模式空间)

使用sed的每个脚本匹配行,对该行进行操作

处理完成后输出该行(同echo输出),没有匹配到就原样输出

3.sed的替换命令s:

-e:使用多个指令,每个指令前都加-e

-i:替换完成后,将得到的内容写回文件中,替换原来的内容

sed 's/old/new/' filename

示例:

sed -e 's/a/aa/' -e 's/aa/bb/' afile bfile:

将文件中每一行的首个a变成b,再变成bb,如原文件中内容为a a a,则输出为bb a a

简化写法:sed 's/a/aa/;s/aa/bb/' afile bfile

sed -i 's/a/aa/' 's/aa/bb/' afile bfile:

将文件中每一行的首个a变成b,再变成bb,如原文件中内容为a a a,不输出,将原文

件中的内容替换为bb a a

sed 's/...//' afile:

将文件中每一行前三个字符替换去掉,放心试,没有加-i不会替换原文件的

sed 's/s*bin//' afile:

去掉第一个bin或sbin,s*表示0-n个s

sed 's/^a/b/' afile:

将每一行开头的a改为b

4.拓展元字符:

-r:可使用拓展正则表达式,使用拓展元字符必须使用-r

示例:

sed -r 's/ab+/!/' afile:

将每一行中第一个ab+改为!,b+有1-n个。+为扩展元字符,必须使用-r

sed -r 's/a|b/!/' afile:

将每一行第一个a或b改为!

sed -r 's/(aa)|(bb)/!/' afile:

将每一行第一个aa或bb改为!,不能是sed -r 's/aa|bb/!/',因为识别不了,会被当成

sed -r 's/a a|b b/!/',意思为将a a或b b改为!

sed -r 's/.*(login)/\1 \1/' /etc/passwd:

()中的内容为一组,\1表示第一组,结果如下:

root:x:0:0:root:/root:/bin/bash

login login

login login

login login

login login

sync:x:5:0:sync:/sbin:/bin/sync

5.替换命令加强版:

全局替换:

s/old/new/g,全部替换,并不是只替换第一个,如:

sed 's/a/b/g' afile: 将每一行中所有的a替换成b

s/old/new/2,将每一行第二次出现old替换为new,如:

sed 's/a/b/2' afile: 将每一行中第二次出现的a替换成b

s/old/new/p afile:

没有匹配到old的行不输出

s/old/new/w afile /usr/local/a.txt:

将替换成功的行写入到指定文件中

寻址:

增加寻址后,只对寻址后的行加载然后匹配。

/正则表达式/s/old/new/g

行号s/old/new/g

行号可以是具体的行,也可以是最后一行,使用$符号

可以使用两种寻址符号,也可以行号和正则混合使用

示例:

sed '/^a/s/a/b/' afile

sed '1s/a/b/' afile

匹配多个命令:/regx/{s/old/new/;s/old/new}

脚本文件:

sed -f sedscript filename,将sed命令写到脚本文件中,直接使用

6.sed其他命令

删除:sed [行号或正则]d

sed '/ab/d' afile, 删除行中有ab的行,只是在模式空间里的输出变化,原文件不变

追加、插入、更改:

sed '/ab/i hello' afile,有ab的上一行插入hello

sed '/ab/a hello' afile,有ab的下一行插入hello

sed '/ab/c hello' afile,有ab的行内容替换为hello

打印命令:p ,sed -n '/ab/p' afile 只打印有ab的行

打印行号命令:=

下一行:-n,逐行读取,默认是全部读取

打印行号:sed -n = afile

读文件和写文件:

sed '/ab/r bfile' afile, 将afile中有ab的行内容与bfile合并

sed '/ab/w bfile' afile, 将afile中有ab的行写到bfile

退出命令:q

只打印1-10行:

sed -n '10q' afile (性能更加,只读取前10行)

sed -n '1,10p' afile

7.sed的多行模式

为什么要有多行模式:

配置文件可能有多行情况,用简单替换无法替换配置文件

N:

将下一行加入到模式空间

sed 'N;s/hel\nlo/!!!/' a.text 或 sed 'N;s/.*/!!!/' a.text

a.text内容如下:

hel

lo

D:

删除模式空间中的第一个自读到第一个换行符

P:

打印模式空间中的第一个字符到第一个换行符

8.保持空间

保持孔家你也是多行的一种操作方式

将内容暂存在保存空间,便于做多行处理

流程: 文本文件 -> 模式空间 -> 保持空间

h和H将模式空间内容放到保持空间,小写是覆盖,大写是追加

g和G将保持空间内容放到模式空间,小写是覆盖,大写是追加

x交换保持空间和模式空间

示例:

将文件内容倒序输出: sed -n '1h;1!G;$!x;$p' file

过程:拿纸推导吧

awk命令:

1.awk作用

awk一般用于文本内容进行统计、按需要的格式进行输出,例如:

完整格式:'BEGIN{...}{}END{...}'

示例:

cut写法:cut -d : -f 1 /etc/passwd

awk写法:awk -F: '/wd$/{print $1}' /etc/passwd

2.awk的字段和使用

每行成为awk的记录

使用空格、制表符分隔开的单词称作字段

字段引用:

awk中使用$1 $2 ... $n 表示每一个字段, $0为全部,与shell中$0是文件名不同

NF表示总个数

字段分割:

awk可以使用-F选项改变字段分隔符(可以用正则):

awk -F',' '{print $0}' afile

行匹配:

awk脚本开头可以用/regx/匹配行:

awk '/^a/{print $0}' afile:打印a开头的行

示例,有如下文件,打印文件中以menu开头的行中操作系统类型,并显示序号:

menu 'windows'

1234

menu 'linux'

abc

menu 'mac'

答案: awk -F"'" '/^menu/{print x++,$2}' afile

3.判断和循环

if语句:

if(表达式){语句}else{语句}

示例:

echo 1 2 3 | awk '{if($2>$3){print 1}else{print 0}}'

while循环:

while(表达式){语句}

do while循环:

do{语句}while(表达式)

for循环:

打印0-9:

echo : | awk '{for(i=0;i<10;i++){print i}}'

打印每个参数:

echo 1 2 3 | awk '{for(i=1;i<=NF;i++){print $i}}'

打印参数的总和:

echo 1 2 3 | awk '{sum=0;for(i=1;i<=NF;i++){sum+=$i};print sum}'

break和continue和其他语言相同

4.awk数组

数组的定义:

数组名称[下标]=值

下标可以用数字或字符串,实际上数字也会被存为字符串

数组的遍历

for(变量 in 数组名称)

数组的删除

delete 数组名称

delete 数组名称[下标]

示例:

echo 1 2 3 | awk '{for(i=1;i<=NF;i++){arr[i]=$i}}END{for(ele in arr)

print ele, arr[ele]}'

命令行参数数组:

ARGC 参数个数

ARGV 参数数组,ARGV[0] 表示命令名称,这里是awk

示例:

创建arg.awk文件,内容:BEGIN{for(i=0;i<ARGC;i++){print ARGV[i]}}

awk -f arg.awk 11 22 33,结果:

awk

11

22

33

5.awk函数

算数函数:

sin() cos()

int()

rand():获取随机数[0,1),重复执行是一样的值

srand()重新获取种子,每次rand()前先使用srand();

字符串函数:

以下函数可以用man awk | less,搜索看其含义

gsub(r,s,t)

index(s,t)

length(s)

match(s,r)

split(s,a,sep)

sub(r,s,t)

substr(s,p,n)

自定义函数:

function 函数名(参数){

语句

return 返回值

}

需要定义在BEGIN之前,示例:

awk 'function a(num){ return num } BEGIN{print a(0)}'

sed命令和awk命令详解相关推荐

  1. linux中sed命令用例,Linux中使用sed命令或awk命令修改常规配置文件

    一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...

  2. linux 内存 参数,linux free命令参数及用法详解(linux查看内存命令)

    linux free命令参数及用法详解(linux查看内存命令) 2019年05月31日 | 萬仟网科技 | 我要评论 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段 ...

  3. Python必备基本技能——命令行参数args详解

    Python必备基本技能--命令行参数args详解 1. 效果图 2. 源码 2.1 简单命令行参数 2.1 轮廓检测源代码 参考 这篇博客将介绍一项开发人员.工程师和计算机科学家必备的技能--命令行 ...

  4. Shell test命令(Shell [])详解,附带所有选项及说明

    test 是 Shell 内置命令,用来检测某个条件是否成立.test 通常和 if 语句一起使用,并且大部分 if 语句都依赖 test. test 命令有很多选项,可以进行数值.字符串和文件三个方 ...

  5. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  6. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  7. Kubernetes二进制集群部署+Web管理界面+kubectl 命令管理+YAML文件详解(集合)

    Kubernetes---- 二进制集群部署(ETCD集群+Flannel网络) Kubernetes----单节点部署 Kubernetes----双master节点二进制部署 Kubernetes ...

  8. python u_对python 命令的-u参数详解

    缘起: 今天在看arcface的训练代码,在shell脚本中运行python 命令时后面加了-u 参数(python -u xx.py),于是对这个参数进行了下小研究. 准备知识 用网上的一个程序示例 ...

  9. linux中group命令详解,linux groupmod命令参数及用法详解

    需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作.接下来是小编为大家收集的linux groupmod命令参数及用法详解,希望能帮到大家. linux groupmod命令参数及用 ...

  10. linux ipset 流量,linux中ipset命令的使用方法详解

    linux中ipset命令的使用方法详解 发布时间:2020-10-25 17:07:19 来源:脚本之家 阅读:97 作者:lijiaocn 栏目:服务器 ipset介绍 iptables是在lin ...

最新文章

  1. [转]使用设计模式改善程序结构(二)
  2. 2016年7月微软MVP申请開始了!
  3. element UI 选择器 踩的坑 获取到了value 显示不出对应的 value
  4. 思科网络基础配置命令大全(二)
  5. (转)如果知道dll文件是面向32位系统还是面向64位系统的?
  6. mysql5.7.17的linux安装,linux下mysql5.7.17最新稳定版本安装教程
  7. 浅谈 JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣。
  8. Day03-运算符和表达式
  9. 数据结构--树--线段树(Segment Tree)
  10. 参考信息 - 云原生(Cloud Native)
  11. 【linux】Permission denied (publickey) SSH用户名密码登录报错
  12. redhat6安装git出现的问题
  13. IOS中常见UI细节和常识
  14. ps教程全套|零基础教程-高阶教程快速入门
  15. CSS案例——静态网页制作
  16. 365天深度学习训练营-第P5周:运动鞋识别
  17. SAP ABAP 标题左边 GOS文件菜单 自定义 CL_GUI_GOS_CONTAINER MENU Gos based menu GOS BUTTON
  18. 小型团队项目管理_寻找小型工程团队的项目管理平衡
  19. 矩阵乘法的计算和来源
  20. Flume+Kafka+Storm+Redis构建大数据实时处理系统:实时统计网站PV、UV+展示

热门文章

  1. Linux下CS程序开发,Linux_Linux玩CS反恐精英的方法,一、下载必要的软件包 我们 - phpStudy...
  2. mysql命令行导入sql文件
  3. Win10 下安装Ubuntu 21.04桌面版 双系统 并设置win10为默认启动系统 详细教程
  4. 荣耀70系列配置曝光 首发索尼IMX800+天玑9000
  5. 在服务器中配置pytorch
  6. Linux系列之查看CentOS版本
  7. 用C语言实现高效嵌入式系统编程
  8. 各类值得收藏的开源项目推荐介绍
  9. 第5节-AxureRP 9快捷键大全 | 剑雨Axure RP9系列【基础】
  10. C++ 之 伪随机数生成 <random>