正则表达sed,\awk编辑

正则表达式

基本正则表

  • ^ 匹配行首
  • $ 匹配行尾
  • [ ]集合,匹配集合中的任意单个字符
  • [^] 对集合去反
  • . 匹配单个任意字符
  • *匹配前一个字符任意次数
  • \ {n,m \ } 匹配前一个字符n到m次
  • \ {n \ } 匹配前一个字符n次
  • \ {n,\ } 匹配前一个字符n次及以上
  • \ ( \ ) 保留

扩展正则

  • +最少匹配一次
  • ?最多匹配一次
  • {n,m}匹配n到m次
  • () 组合为整体,保留
  • | 或者
  • \b 单词边界

sed

  • 用法
    sed [选项] ‘条件指令’ 文件…

选项

  • -n 屏蔽默认输出,默认sed会读取文档的全部内容
  • -r :sed支持扩展正则
  • -i :sed修改源文件,默认sed只是通过内存临时修改文件

指令

  • p输出文档内容
sed -n '1p' user         //输出第1行
sed -n '2,4p' user       //输出2~4行
sed -n '3p;5p' user     //输出第3行第5行zhanghuxinxi
sed -n  '2,+2p'  user   //输出第2行,以及后面的2行
sed -n  '1~2p' user     //查看奇数行
sed -n '2~2p' user      //查看偶数行
**sed的定址符可以使用正则表达式,在/ / 中间填写** 
sed -n '/root/p' user    //查看有root的行
sed -n '/^root/'  user    //查看以root开头的行
sed -n '=' user    //查看所有行的行号
sed -n '$='  user //查看最后一行的行号
  • d 产出行,使用方式和指令p基本一致,不用加-n
sed '/nologin$/d' user //删除含有nologin结尾的行
sed '/^install/d' user  //删除以install开头的行
sed '$d' user          //删除文件的最后一行
sed '/^$/d'  user     //删除所有空行
  • s 替换
  • 用法: s/old/new/
    默认替换第1个old
sed 's/2017/xxxx/' test     //所有行的第一个2017
sed '2s/2017/xxxx/2' test  //替换第二行第二个2017
sed 's/2017/xxxx/g'      //更换所有行的所有2017
sed '3s/2017/xxx/1,2' test   //第三行第一,二个2017替换为xxx
sed '10,13s/^/#&/' test  //在10到13行行首添加# &表示任意字符
sed 's/$/xxx/' test  //在行尾添加xxx
sed '3s/2017/xxxx/;3s/2017/xxxx' test  //更换第3行第1个2017,以及更换后第一个2017
sed -n 's/2017/xxxx/p' test //查看替换之后行的内容
sed 's/2017/ /' test    //替换所有行第一个2017为空---删除2017
**替换分隔符"/"可改用其他字符如#,&,便于修改文件路径**
sed 's#/bin/bsah#/sbin/sh#'  test //将/bin/bash替换为/sbin/sh
sed 's/^#an/an/'  test //解除以#an开头行的注释
  • i : 在指定的行之前插入文本
  • a: 在指定的行之后追加文本
  • :c: 替换指定的行
sed '2a xxx' user
sed '2i xxx' user
sed '2c xxx' user

案例

  • 删除文件中第二个,最后一个字符
sed 's/.//2;s/.$//'  11.txt     
  • 将文件中每行的第一个和倒数第一个字符互换
sed -r 's/^(.)(.*)(.)$/\3\2\1/' 11.txt   
  • 文件中每行的第一个和第二个字符互换
sed -r 's/(.)(.)(.*)/\2\1\3/'  11.txt
  • 删除文件中所有数字
sed 's/[0-9]//g' 11.txt

AWK

基本操作:awk [选项]’[条件]{指令}’ 文件
print 常用编辑命令,打印
未指定分隔符是,默认将空格,制表符等作为分隔符.

awk -F: '{print $1,$7}' /etc/passwd    //以分号分隔的第1,7个字段
-F 指定分隔符
$n 显示第n个字段
awk -F[:/] '{print $1,$7}' /etc/passwd
-F[:/]  识别多个分隔符,以: 或/分割 
awk -F: '/root/{print $2}' /etc/passwd
/root/--正则表达式 含有root的行的第二列
 awk -F: '{print NR,NF}'  /etc/passwd
 NR 文件当前的行号 NF:文件当前的列号(有几列)

内置变量
$0:文本中当前行的全部内容
$n:文本中的第n列
NR:文件中当前的行号
NF:文件中当前的列数(有几列)
常量" "

awk -F: '{print $1,"解释器:",$7}' /etcpasswd

处理进程

  • BEGEIN{}行前处理,读取文件内容前执行,指令执行一次
  • { }逐行处理,读取文件过程中执行,执行指令n次
  • END{ }行后处理,读取文件结束后处理,执行1次
awk -F: 'BEGIN{print "User\tUID\tHome"} \
 {print $1 "\t"  $3  "\t"  $6}     
 END{print "Total",NR,"lines."}' /etc/passwd

"~包含 !~ 反向匹配

awk -F: '$1~/root/{print $1,$7}' /etc/passwd
输出第一列为root的行的第1.7列

数值/字符串比较设置条件
比较符号: ==,!=,>,<,>=,<=
逻辑测试符号 ||或 $$与

awk -F: 'NR==3{print}' /etc/passwd  //输出行号为3的用户记录
awk -F: '$3>=1000{print $1,$3}' /etc/passwd   //输出用户UID大于等于1000的账户名称和UID信息
awk -F: ' $3>10 &&$3<20' /etc/passwd  /输出账户UID大于10且小于20的账户信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值