sed 和gawk基础
sed和gawk基础
sed
-
定义
- 流编辑器,通过预定义的一组规则,以行为单位来编辑数据流
-
语法
sed options [address]commad file- options为选项;[address]用于确定原文件的行的位置(包含单行,字符匹配,区间,多文本模式);command具体的命令;file为数据源(可来自键盘输入或管道符)
-
选项说明
-
-e
- 指定使用多条命令
-
-f
- 从file中读取命令
-
-n
- 抑制输出(只输出指定行)
-
-r
- 使用正则表达式
-
-
命令说明
-
-s
- 替换
-
-p
- 打印
-
-d
- 删除
-
-i
- 某行前插入
-
-a
- 某行后附加
-
-c
- 修改
-
-y
- 字符转换
-
-r
- 从某个文件中读取内容到原文件
-
-w
- 从原文件中读取内容到新文件
-
-
标志位(flags)
-
数字
- 对某行的第n处操作(精准匹配)
-
定义
- 对sed命令进行补充说明
-
g
- 对某行的所有的匹配字符操作
-
p
- 打印命令执行结果内容
-
w newfile
- 保存内容到新文件
-
=
- 打印内容时显示行号
-
-
规则
-
替换
-
普通替换
sed 's/pattern/replacement/flags' file- 找到第一处字符,进行替换
-
寻址替换
-
划定区间
sed 'n,ms/pattern/replacement/flags' file- 找到n行到m行之间的字符,进行替换
-
特定字符
sed '/target/s/pattern/replacement/flags' file- 找到搜索字符的所在行,对字符进行替换
-
-
正斜线“/”替换
-
使用转义符
sed 's/\/bin\/bash/\bin\/csh/' file -
使用!
sed 's!/bin/bash!/bin/csh!' file
-
-
-
删除
-
删除全部内容
sed 'd' file -
删除区间内行
sed 'n,md' file -
删除匹配字符1到匹配字符2间的所有行
sed '/target1/, /target2/d' file -
删除特定行
sed 'nd' file
-
-
插入和附加
-
插入
-
所有行之前插入内容
sed 'i\content' file -
指定行之前插入内容
sed 'ni\content' file -
区间行内前插入内容
sed 'n,m\content' file -
匹配字符所在行前插入
sed '/target/i\content' file
-
-
附加
-
所有行之后附加内容
sed 'a\content' file -
指定行之后附加内容
sed 'na\content' file -
区间行后附加内容
sed 'n,m\content' file -
匹配字符所在行后附加内容
sed '/target/a\content' file
-
-
-
修改
-
修改所有行
sed 'c'\content file -
修改指定行
sed 'nc'\content file -
修改区间内行
sed 'n,mc\content' file
-
-
字符转换
-
所有行映射转换
sed ’y/abc/ABC ' file -
指定行映射转换
sed 'ny/abc/ABC' -
区间行内映射转换
sed 'n,m/abc/ABC'
-
-
打印
-
打印全部内容
sed 'p' file -
打印区间内行
sed 'n,mp' file -
打印某行到最后行
sed 'n,$p' file -
打印包含匹配字符行
sed '/target/p'
-
-
写入文件
-
原文件所有内容写入新文件
sed 'w newfile' file -
原文件某行写入新文件
sed 'nw newfile' file -
原文件区间行写入新文件
sed 'n,mw newfile' file -
原文件包含匹配字符的行写入新文件
sed '/target/w newfile' file
-
-
读取文件
-
原文件读取新文件所有内容
sed 'r newfile' file -
原文件从某行后开始读取新文件所有内容
sed 'nr newfile ' file -
原文件从包含匹配字符的所在行后开始读取新文件所有内容
sed '/target/r newfile' file
-
-
gawk
-
定义
- 支持处理数据并格式化输出的编程语言
-
语法
gawk options program file- options 为选项;program为gawk程序;file为数据源(也可以来自键盘输入和管道符)
-
选项说明
-
-F
- 指定字段分隔符
-
-f
- 从文件中读取程序
-
-mf
- 指定最大字段数量
-
-mr
- 指定最大数据行数
-
-v
- 指定程序变量和默认值
-
-
程序说明
-
格式
gawk '{ xxxx ;xxxx;xxxx}'- 多条命令之间的分隔符为";"
-
运行优先级
gawk 'BEGIN{ xxx}'- 优先级最高,程序执行前执行
gawk '{xxx}'- 优先级一般,程序的正常执行
gawk 'END{xxx}'- 优先级最低,程序执行后执行
-
定义变量和数组
-
定义变量
gawk -v var1=value 'BEGIN{print var1}'
gawk 'BEGIN{var1=value;print var1 }' -
定义数组
gawk 'BEGIN{ array[0]=a; array[1]=b; print array[0], array[1] }
-
-
数据提取
-
字段分隔符
-
以冒号为字段分隔符(默认是空格)
-
选项指定
gawk -F ' :' '{pirnt $n,$m}' file -
程序定义
gawk 'BEGIN{FS=":" } {print $0}' file
-
-
-
字段提取
-
$0
-
代表整个文本
gawk '{print $0}' file
-
-
$1
-
代表第一个字段
gawk '{print $1}' file
-
-
$2
-
代表第二个字段
gawk '{print $2}' file
-
-
$n
-
代表第n个字段
gawk '{print $n}' file
-
-
$NF
-
代表最后一个字段
gawk '{print $NF}' file
-
-
-
行记录提取
-
行号匹配
-
匹配第n行
gawk 'NR==n {print $0}' file
-
-
字段关键字
-
匹配第n个字段包含特定字符的行
gawk ’$n ~ /xxx/ {print $0}‘ file -
匹配第n个字段不包含特定字符的行
gawk ’$n !~ /xxx/ {print $0}‘ file
-
-
-
特定字符提取
-
行列精准匹配
-
匹配第n行第m列的字符
gawk 'NR==n {print $m}' file
-
-
-
-

浙公网安备 33010602011771号