码迷,mamicode.com
首页 > 系统相关 > 详细

shell_对文件的操作

时间:2021-01-07 12:17:11      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:语法   inf   aaa   roo   数学   ||   uid   输出   精确   

 sed命令

语法:

sed [options] ‘{command}[flags]‘ [filename]

{}是必须有,[]可选

options:

-r        使用扩展的正则表达式

-n       只打印缓存中的内容,不打印文本内容

-e       执行多个命令

-f        执行文件中的命令

-i        修改原文件

-i.xxxx          修改源文件并且备份源文件

sed常用内部命令:

a     在匹配后添加

i      在匹配前添加

p     打印

d     删除

s     查找替换

c     更改

y     转换 N D P 

命令a使用:(追加)

sed ‘a\hello world‘ data                             在每行后面添加hello world

sed ‘3a\hello world‘ data                           在第3行后面添加hello world

sed ‘2,4a\hello world‘ data                        在第2-4行后面添加hello world

sed ‘/3 the/a\hello world‘ data         先匹配"3 the"的行,然后在这行后面添加hello world,//是匹配模式

命令i使用:(插入)

sed ‘i\hello world‘ data                             在每行前面添加hello world

sed ‘3i\hello world‘ data                           在第3行前面添加hello world

sed ‘2,4i\hello world‘ data                        在第2-4行前面添加hello world

sed ‘/3 the/i\hello world‘ data         先匹配"3 the"的行,然后在这行前面添加hello world,//是匹配模式

命令d使用:(删除)

sed ‘d‘ data                             删除所有行

sed ‘3d‘ data                           删除第3行

sed ‘2,4d‘ data                        删除2-4行

sed ‘/3 the/d‘ data        先匹配"3 the"的行,然后删除这行//是匹配模式

sed -r ‘/(^#|#|^$)/d‘ data               删除#开头,包含#以及空行

命令s使用:(替换)

sed ‘s/dog/cat/‘ data                              把每行中dog替换成cat

sed ‘3s/dog/cat/‘ data                               把第3行中dog替换成cat

sed ‘2,4s/dog/cat/‘ data                            把2-4行中dog替换成cat

sed ‘/3 the/s/dog/cat/‘ data                          先匹配"3 the"的行,然后把行中dog替换成cat //是匹配模式

命令c使用:(更改)

sed ‘c\hello world‘ data                             所有行改为hello world

sed ‘3c\hello world‘ data                           第3行改为hello world

sed ‘2,4c\hello world‘ data                        第2-4行改为hello world并且合并为一行

sed ‘/3 the/c\hello world‘ data         先匹配"3 the"的行,然后把这行改为hello world,//是匹配模式

命令y使用:(转换)

sed ‘y/abcd/ABCD‘ data                                 按照字符对应关系转换

命令p使用:(删除)

sed ‘p‘ data                             打印所有行

sed ‘3p‘ data                           打印第3行

sed ‘2,4p‘ data                        打印2-4行

sed ‘/3 the/p‘ data        先匹配"3 the"的行,然后打印这行//是匹配模式

标志位的使用

数字    表示新文本替换的模式

g:      表示用新文本替换现有文本的全部实例

p:         表示打印原始的内容

w filename      将替换的结果写入文件

 

sed ‘s/dog/cat/2‘ data                              把每行中第二处dog替换成cat

sed ‘s/dog/cat/g‘ data                              把每行中所有dog替换成cat

sed ‘3s/dog/cat/p‘ data                               把第3每行中dog替换成cat并且打印

sed ‘3s/dog/cat/w newdata‘ data                  把第3每行中dog替换成cat并且把修改的行保存在newdata文件,源文件不变

-e和-f的用法

-e用法

sed -e ‘s/brown/green/;s/dog/cat/‘ data 

-f用法

创建文件,aaa:

s/brown/green/

s/dog/cat/

sed -f aaa data

sed小技巧

sed -n ‘$=‘ data      打印行号

 

 

AWK命令

语法

awk [options] ‘[BEGIN]{program}[END]’ [file]

常用命令选项:

-F fs     指定列分割符

-f file       指定读取程序的文件名

-v var=value   定义awk程序中适用的变量和默认值

awk对字段的提取

字段相关内置变量:

$0    表示正行文本

$1    表示行中第一个数据字段

$2    表示行中第二个数据字段

$N      表示行中第N个数据字段

$NF    表示行中最后一个数据字段

 

awk ‘{print $0}‘ data        打印所有列

awk ‘{print $NF}‘ data          打印最后一列

awk ‘{print $3}‘ data        打印第三列

awk对行的提取

awk ‘NR==3{print $0}‘ data     打印第3行的所有列

-F的用法

awk -F ":" ‘NR==1{print $1}‘ passwd           用:作为分隔符,打印第一行的第1列

awk -F ":" ‘NR==1{print $1,$3,$5}‘ passwd      用:作为分隔符,打印第一行的第1,3,5列

awk -F ":" ‘NR==1{print $1 "-" $3 "-" $5}‘ passwd    用:作为分隔符,打印第一行的第1,3,5列并且用-隔开

awk -F ":" ‘NR==1{print "account: " $1,"UID: " $3,"DESC: " $5}‘ passwd

AWK高级用法

awk定义变量

head -2 /proc/meminfo | awk ‘NR==1{Total=$2}NR==2{Free=$2;print (Total-Free)*100/Total"%"}‘

awk定义数组

awk ‘BEGIN{array[1]="test";array[2]=18;print array[1],array[2]}‘

awk运算

赋值运算:=

比较运算:> >= == <= < !=

数学运算:+ - * / % ** ++ --

逻辑运算: && ||

匹配运算:~ !~

用法

seq 1 10 num

awk ‘$1>=5{print $0}‘ num

awk ‘$1!=5{print $0}‘ num

awk -v ‘count=0‘ ‘BEGIN{count++;print count}‘     

awk -F: ‘$1=="root"{print $0}‘ passwd      精确匹配

awk -F: ‘$1 ~ "ro"{print$0}‘ passwd       模糊匹配

awk环境变量

FIELDWIDTHS      以空格分隔的数字列表,用空格定义每个数据字段的精确宽度

FS             输入字段分隔符号

OFS             输出字段分隔符号

RS             输入记录分隔符

ORS                                       输出记录分隔符

用法

awk ‘BEGIN{FIELDWIDTHS="5 2 8"}NR==1{print $1,$2,$3}‘ /etc/passwd

awk ‘BEGIN{FS=":"}$1!~"ro"{print $0}‘ passwd

awk ‘BEGIN{FS=":";OFS="-"}$1=="root"{print $1,$3,$5}‘ /etc/passwd

awk ‘BEGIN{RS="";OFS="\n"}{print $1$,2,$3}‘ num

awk ‘BEGIN{RS="";ORS="#####"}{print $1$,2,$3}‘ num

 

shell_对文件的操作

标签:语法   inf   aaa   roo   数学   ||   uid   输出   精确   

原文地址:https://www.cnblogs.com/goldtree358/p/14228772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!