shell(8) sed-gawk.doc

Sed

读入一行数据,与编辑的命令匹配,修改数据再输出到 output

基本格式

sed options script file

-e 执行多个命令

-f 指定命令文件,其中命令无须“ ; ”分割

-n 禁止输出,直到遇到 p flag

eg: sed -e 's/xx/xx/; s/xxx/xxx' data # 使用 ; ,命令结尾与分号间无空格

 

sed 的命令

s, 默认仅替换首次出现的文本   s/pattern/replacement/flags

  flags: g 替换全部; p 打印原始行,与 -n 结合以输出已修改行; w filename 结果写入到 filename ;数字,新文本替换的模式,如 2 表示替换第 2 处匹配

  sed / 用作转义, / 用作定界,也可选择其他字符如“ ! ”: sed 's!/bin/bash!/bin/csh!' /etc/passwd

d, 删除: sed '3,$d' data

p,

i, 指定行之前插入新行

a, 指定行之后附加新行,这两个命令必须单独指定要插入或附加的行

eg: sed '[address]command /   # 必须使用 / 换行,多行则使用多个 /

       new line'

 

line addressing 行寻址

使 sed 作用于特定行:

1) 指定行号方式,首行行号为 1 $ 表示尾行: sed '2,$s/dog/cat/' data1

2) 指定匹配模式方式, /pattern/command sed /'ri*/s/dog/cat/' data1

  指定多个模式,使用“ , ”分隔: sed '/1/,/3/d' data sed 在匹配模式 /1/ 时打开删除,直到匹配到模式 /3/ 时关闭删除

 

组合命令,对同一行执行多个命令:

sed '2{s/dog/cat/; s/aaa/bbb/' data

 

sed 通常只处理单行文本,将成为处理跨行短语的限制,使用 N D P 等命令

 

 

gawk

基本格式

gawk options program file

-F fs ,指定用作数据分段的文件分隔符 field seperation character

-f file ,指定程序文件名

-v var=value ,变量和默认值

-mf N ,要处理的字段的最大数目

-mr N ,最大记录大小

-W keyword ,兼容模式或告警级别

 

gawk 脚本由 {} 定义,必须放在单引号内, gawk 假定脚本为单文本字串

变量: $0 整行文本, $1 第一个字段

eg: gawk -F: '{print $1}' /etc/passwd

多个命令,使用分号分开: gawk '{$1="xxx"; print $0}'  # 可赋值,使用“ ; ”分割多个命令

从文件读取程序:

  文件内容: {print $5 "'s userid is " $1};

  $gawk -F: -f script /etc/passwd

 

  脚本文件: script

   {

       text="'s userid is "  #无须;

       print $5 test $1              #变量的使用无须 $

  

 

处理数据前 / 后运行脚本 BEGIN/END

eg:

       echo adfdfadf|gawk 'BEGIN{print "begin:"}{print $0}END{print "end"}'

 

变量:

1 FIELDWIDTHS :用空格定义每个数据字段的精确宽度,设置后将忽略 FS eg: 'BEGIN{FIELDWIDTHS="2 3 1"}'

2 FS 变量,指定字段分隔符, eg:    gawk 'BEGIN{FS=":"}'

3 RS ,指定记录的分隔符,默认为换行

4 OFS ,输出字段的分隔符

5 ORS ,输出记录的分隔符,默认为换行

6 )使用环境变量, ENVIRON [“ HOME ”],可使用任意环境变量

7 NF ,数据字段个数, $NF 最后一个数据字段

8 FNR ,(当前文件的)当前记录号,

9 NR ,已处理记录个数

 

使用正则表达式

必须出现在脚本的左括号前,用于匹配任何字段符合该模式的记录——这样也可以使用 gawk 来直接定位行,无须 sed

eg:gawk 'BEGIN{FS=","}/11/{print $1}' data1

 

matching operator ,使正则表达式匹配特定字段

eg:gawk '$2~/11/{print $0}' data1

否定匹配,使用 !:

eg:gawk '$2!~/11/{print $0}' data1

使用数学表达式匹配,判断符号包括 ==  <=  <  >=  >

eg: '$4==0{print $0}'   # 不能用于字符

 

格式化输出

printf "format string",var1,var2...

eg: printf "result is %d/n",x  # 不会自动换行,所以需要 /n

格式化控制符同 c 语音,包括 c/d/e/f/s/x

 

内置函数

eg:

gawk '{x="aasf";print toupper(x)}' data

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值