sed和awk中,每个指令都包括两个部分,模式和过程。模式是/分隔的正则表达式。过程是指一个或多个将被执行的动作。
处理过程:
1、 所有指令解释并应用于单行,sed会输出行并循环处理下一行,而awk不主动输出行,循环处理下一行。
2、sed过程由单个字母组成。
3、awk过程由程序设计语句和函数组成,一般使用{}括起。
一、sed使用
1、sed执行两种方法:
Ⅰ:命令行编辑
sed [-e] ' instruction' file
多个指令时才需要使用-e选项。
sed 's/name/yangwx/' filename
应该养成将指令用单引号包围起来的习惯。单引号可以包括空格等特殊符号。
有三种方式可以指定多个指令
分号分隔
sed ' s/name/yangwx/ ; s/phone/123456789/ ' filename
每个指令前放-e
sed -e ' s/name/yangwx/ ' -e ' s/phone/123456789/ ' filename
使用Bourne shell的分行指令。再输入单引号后按return键,就会出现多行输入的提示符(>)
[root@iZ2ze43igrnrzi1g8wngb4Z tmp]# sed '
> s/sql/1111/
> s/text/csv/
> s/load/unload/' stock_load.sql
use stock;
delete from yang_stock_hist where data_date = '20211125';
unload DATA local infile "/stock_data/data/20211125/stock_hist.csv" into TABLE yang_stock_hist fields terminated BY ',';
Ⅱ:将命令放入文件中
命令行上有较长的编辑命令时,可以将命令放入到文件中执行。
sed -f scriptfile filename
使用-n阻止自动输出,同时需要使用p指令来输出匹配到的内容。
sed -n ' s/name/yangwx/p' filename
二、awk使用
命令行调用:awk ' introduction ' filename
脚本调用:awk -f awkfile filename
默认分隔符:空格或者制表符
引用字段:$0 整个记录 $1分隔后第一个元素
使用模式: awk ' /name/ ' filename OR awk ' /name / { print $1; print $2 }' filename OR
awk '$1 == name { print $0} '
注意事项:使用单引号括起来指令 , 使用{}括起来print , 使用//括起来正则表达式