sed and gawk Command

less than 1 minute read

Published:

sed [Stream Editor]

  • 处理流程
    1. 一次从输入数据中读取一行
    2. 根据所提供的编辑器命令匹配数据
    3. 按照命令修改流中的数据
    4. 将新的数据输出到STDOUT(注意这里默认不是写回原文件)
  • sed命令格式:sed options script file

  • 参数内容
OptionsDescription
-e script处理输入时,将scripts中指定命令添加到已有命令中
-f file将file中的命令添加到已有命令中
-n取消将结果输出到STDOUT,需要使用print命令完成输出
# 命令行方式
sed -e 's/brown/green/; s/dog/cat/' data.txt

# 在file.txt中添加如下两行
# s/brown/green/
# s/dog/cat/

# 文件方式
sed -f file.txt data.txt

替换标记

默认只替换每行第一处,使用标记替换(substitution flag)可以指定替换位置s/pattern/replacement/flags,具体有四种替换标记:数字、g、p、w

行寻址

[address]command或以如下方式使用行选址

address{
 command1
 command2
 command3
}

gawk

功能

  • 使用变量
  • 使用算数和字符串操作
  • 使用结构化编程,if-then和循环,来添加逻辑
  • 提取数据元素,并重新排列,以形成格式化报告

参数

  • -F fs设定分隔符
  • -f file从文件读取程序
  • -v var=value设定变量默认值
  • -mf N【max field】指定每行处理的最大字段数
  • -mr N【max row】指定处理的最大行数
  • -W keyword指定gawk兼容模式、警告等级

变量

  • $0整个一行

  • $n行中第N个数据字段

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

Keyword: BEGIN & END

# BEGIN: 开始处理数据前要运行的脚本
gawk 'BEGIN {print "New Data Contents"} {print $0}' temp.txt 
# END: 处理完成后,要运行的脚本
gawk 'BEGIN {print "The data File COntents:"} \
{print $0} \
END {print "End of File"}' temp.txt

gawk命令文件

BEGIN {
    print "The latest list of users and shells";
    print " UserID \t Shell";
    print "-------- \t -------" 
    FS=":" 
}
{
    print $1 "\t" $7
}
END {
    print "This concludes the listing" 
}