初识sed和gawk(一)
linux中的sed和gawk都是处理文本文件的工具,可以帮助我们检查日志文件,读取配置文件,处理数据元素,以及日常任务的自动化
sed编辑器
sed编辑器被称为流编辑器,与vim这种交互式的编辑器相反。
sed编辑器会执行以下操作
- 一次从输入中读取一行数据
- 根据读取的编辑器命令匹配数据
- 按照命令修改流中的数据
- 将新的数据输出到stdout
命令的格式
- sed options script file
选项
- -e script 在处理输入的时候,将script中指定的命令添加到已有的命令中
- -f file 在处理输入的时候,将file指定的命令添加到已有的命令中
- -n 不产生命令输出,使用print命令来完成输出
在命令行定义编辑器命令
默认sed编辑器会将指定d的命令应用到stdin输入流上。举个例子
echo "this is a test" | sed 's/test/big/ test'
s命令会用斜线间指定的第二个文本字符串替换第一个文本字符串,即test –> big test
需要注意的是:sed编辑器并不会真正修改文本文件的数据,他只会j将修改后的数据发送到stdout
echo -e 's/brown/green/; s/dog/cat/' data.txt
使用文件的方式
echo "this is a cat" | sed -f script.sed
其中 script.sed 中的内容为:
s/cat/dog/
则输出为
this is a dog
gawk编辑器
gawk能提供一个编程环境和重新组织文件中的数据,他能做到的事情包括以下几点:
- 定义变量来保存数据
- 使用算术和字符串操作符来处理数据
- 使用一些编程语法来为数据增加处理的逻辑
- 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化后的报告,例如格式化日志文件
命令格式
gawk options program file
选项 描述 -F fs 指定行中划分数据字段的字段分隔符 -f file 从指定文件中读取程序 -v var=value 定义gawk程序中的一个变量及其默认值 -mf N 指定要处理的文件中的最大字段数 -mr N 指定数据文件中的最大数据行数 -W keyword 指定gawk的兼容模式或警告等级 一个例子
gawk '{print "hello world"}'
默认gawk会从stdin接收数据,终止可以使用ctrl+d
使用数据字段变量
gawk会给一行的每个元素分配一个变量
- $0代表整个文本行
- $1代表文本行中的第一个数据字段
$ cat data2.txt One line of test text. Two lines of test text. Three lines of test text. $ $ gawk '{print $1}' data2.txt One Two Three
在程序脚本中使用多个命令
$ echo "My name is Rich" | gawk '{$4="Christine"; print $0}' My name is Christine
从文件中读取程序
$ cat script2.gawk {print $1 "'s home directory is " $6} $ gawk -F: -f script2.gawk /etc/passwd root's home directory is /root bin's home directory is /bin daemon's home directory is /sbin
在处理数据之前运行脚本,第一个{}中的内容是处理数据之前的脚本,第二个{}中的内容才是真正处理数据的脚本
gawk 'BEGIN {print "The data3 File Contents:"} {print $0}' data3.txt
在处理数据之后运行脚本,同理在END后面为处理数据之后要执行的脚本
$ echo "my name is harper " | gawk 'BEGIN {print 123} {print $4} END {print 456}'