Linux里面一切皆文件,那么像awk、sed等一些文本处理工具命令集,就需要知道一些awk、sed的基本操作;本文列举比较简单常规操作,例如awk有一套自己的编程体系可写以awk结尾的文件,就像CentOS7.6安装gfio图形工具一文中的fio文件类似,这里就不展开了。
sed的参数简介
-n:仅显示script处理后的结果。--quiet,--silent同理
d :删除, d 后面通常不接任何参数
i : 插入, i 的后面可以接字串,而这些字串会在新的一行出现
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作!
sed-替换文件内容
#文件内容全部替换,string-->sed
> sed -i 's/string/sed/g' Filename
sed--删除行
#删除字符串的行
> sed -i '/***/d' Filename
> sed -i “/$variate/”d Filename
#删除行数
> sed -i 'Nd' Filename #删除第N行
> sed -i 'N,Md' Filename #删除第N-M行
> sed -i “${var1},${var2}d” Filenane
#删除固定的字符
> sed 's/..//g' file.txt #删除前两个字符
> sed 's/.\{5\}//g' file.txt #删除前五个字符
> sed 's/..$//g' file.txt #删除最后两个字符
> sed 's/.a//g' file.txt #删除字符a以及a前面的任一字符
> sed 's/a.//g' file.txt #删除字符a以及a之后的任一字符
awk自带变量&字符集
#awk部分变量
ARGC: 命令行参数的个数
FNR: 各文件分别计数的行号
NR: 行号,当前处理的文本行的行号
FS;-F: 输入字段分隔符, 默认为空白字符
OFS: 输出字段分隔符, 默认为空白字符
ARGV: 数组,保存的是命令行所给定的各参数
RS: 输入记录分隔符(输入换行符), 指定输入时的换行符
NF: 当前行的字段的个数(即当前行被分割成了几列),字段数量
ORS: 输出记录分隔符(输出换行符),输出时用指定符号代替换行符
#字符集
[[:alpha:]] <==> 文字字符 [[:digit:]] <==> 数字字符
[[:lower:]] <==> 小写字符 [[:upper:]] <==> 大写字符
[[:cntrl:]] <==> 控制字符 [[:punct:]] <==> 标点字符
[[:blank:]] <==> 定位字符 [[:graph:]] <==> 非空字符、非空格控制
[[:print:]] <==> 非空包括空格 [[:space:]] <==> 所以空白、新行、空格、制表字符
[[:alnum:]] <==> [a-z0-9A-Z] [[:xdigit:]] <==> 十六进制
awk-正则字符串匹配
#指定列的字符串匹配
> awk '$x ~ /***/ {for(i=NF-1;i>1;i--)printf($i);}' Filename
#不做任何限制的匹配
> awk '/***/ {for(i=NF-1;i>1;i--)printf($i);}' Filename
#两者满足其一即可,$string是引用变量匹配
> awk -F '[[:punct:][:space:]]+' '/***/ || /'$string'/{print $1}' Filename
#文件的$1列与“string”匹配,打印$2列数据
> awk -F '[[:punct:][:space:]]+' '$1==string{print $2}' Filename
#两者都满足即可,$1列为“root”,$5列为“var”都满足条件后,打印$0列内容
> awk -F '[[:punct:][:space:]]+' '($1==“root”)&&($5==“var”) {print $0}' Filename
#awk嵌套,L的作用就是获取行号并加3,然后打印L行的$1列的内容
> Lat=`awk -F '[[:space:]],:()=]+' -v L=$(awk '/'$Str'/{L=NR+3;print L;}' $RWFile) 'NR==L{print $1}' $RWFile`
#若是使用一些特殊符号,需转义,如下所示
> Lat=`awk -F '[[:space:]],:()=\\[\\]]+' -v L=$(awk '/'$Str'/{L=NR+3;print L;}' $RWFile) 'NR==L{print $1}' $RWFile`
awk-引用变量
使用 "' 把shell变量包起来,即 "'$var'";注意是“双引号+单引号+shell变量+单引号+双引号”的格式。
使用 "'" 把shell变量包起来,即 "'"$var"'";注意是“双引号+单引号+双引号+shell变量+双引号+单引号+双引号”的格式,如果变量的值中包含空格,为了shell不把空格作为分隔符。
export变量,然后再awk中使用ENVIRON["var"]形式获取环境变量的值。例如:
var="this is test";export var;awk 'BEGIN{print ENVIRON["var"]}'
使用awk -v选项,当变量不是很多时,建议使用这种方式。例如:
var="this is test";awk -v AwkVar="$var" 'BEGIN{print AwkVar}'
声明:本人所写的只是本人在使用中遇到的问题做个记录总结,很多内容也是百度,或者查阅官方文档,若与他人有重复;若需按照本文配置,请认真确认是否适合你的情况,造成一切损失;本人概不负责。