sed、cut和awk命令

sed   通过指定的正则表达式完成指定关键字的过滤、截取、修改等操作

sed '1,3d' passwd                           #将 passwd 的第 1-3 行删除

sed -n '/^[Rr]oot/p' passwd             #查找以R或r开头且后面字符为oot的行

---不加-n则显示所有行

sed -n ‘/root/p’ passwd                   #打印匹配字段的行

sed '1d' passwd                             #默认删除第一行

sed '4,$d' passwd                          #默认删除第 4 行至末尾行

sed '/root/d' passwd                       #删除含有指定字符串的行

sed –n 's/root/Linux/p’ passwd       #将所有行第一个出现的root换为Linux

sed -n 's/root/Linux/gp' passwd     #将文件中所有出现的root换为Linux    

sed 's/bash$/&.linux/p' passwd      #将行尾为bash的行后追加.linux

sed -n 's/bash$/linux/gp' passwd   #将所有行行尾为bash换为linux

sed -n '/root/,/bin/p' passwd           #显示所有含有root及bin的行

sed -n '1,/adm/p' passwd               #从第一行开始显示至包含adm的行

多点编辑方法

sed -e '2d' -e 's/root/linux/g' passwd        #删除第二行并将所有root换为linux

sed -ne '5,6p' -e '/root/p'  passwd            #打印第5、6行,并打印含有root的行

sed '/root/r /etc/fstab' passwd                  #查找含有root的行并追加文件内容

sed '/root/w 1.txt' passwd                        #将含root的行>到1.txt

sed '/root/a\--linux--' passwd                   #含有root的行下加入"--linux--"

sed 's/root/ROOT/g' passwd                   #将所有小写的root改为大写

sed ‘y/root/ROOT/’ passwd                     #将r、o、o、t字符分别换为R、O、O、T

替换

1. sed替换的基本语法为:

sed 's/原字符串/替换字符串/'

单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义。

2. 单引号” ‘ ’”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,格式如下:

# 要处理的字符包含单引号
sed "s/原字符串包含'/替换字符串包含'/" 

3. 命令中的三根斜线分隔符可以换成别的符号,有时候替换目录字符串的时候有较多斜线,这个时候换成其它的分割符是较为方便,只需要紧跟s定义即可。

# 将分隔符换成问号”?”:
sed 's?原字符串?替换字符串?'

4. 可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个,例如:

# 替换所有匹配关键字
sed 's/原字符串/替换字符串/g'

5. 一些特殊字符的使用

  ”^”表示行首

  ”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行) # 注意这里的 " & " 符号,如果没有 “&”,就会直接将匹配到的字符串替换掉
sed 's/^/添加的头部&/g'      #在所有行首添加
sed 's/$/&添加的尾部/g'      #在所有行末添加
sed '2s/原字符串/替换字符串/g'  #替换第2行
sed '$s/原字符串/替换字符串/g' #替换最后一行
sed '2,5s/原字符串/替换字符串/g' #替换2到5行
sed '2,$s/原字符串/替换字符串/g' #替换2到最后一行

6.批量替换字符串

在linux 没有安装vi/vim 可以使用下面命令编辑文件:

sed -i "s/var params myvalidate.UserFigma/defer c.JsonReturn() \n    var params myvalidate.UserFigma/" user_controller.go 

sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir

7. sed处理过的输出是直接输出到屏幕上的,使用参数”i”直接在文件中替换。

# 替换文件中的所有匹配项
sed -i 's/原字符串/替换字符串/g' filename

8. 多个替换可以在同一条命令中执行,用分号”;”分隔,其格式为:

# 同时执行两个替换规则
sed 's/^/添加的头部&/g;s/$/&添加的尾部/g' 

cut

cut

    -d    指定分隔符

    -f    显示第几列

cut -d ":" -f 1 passwd

awk    # 通过正则表达式 , 得到需要的行 , 列信息

awk '/root/' passwd    #打印所有包含有 root 字段的行

df -h |awk '{print $2}'    #打印df -h的第二列内容

df -h |awk '{print $2,$5}'    #打印df -h的第二列和第五列

awk 'NR==4' passwd    #显示文件的第四行

df -h |awk '/\/dev\/sda2/ {print $2}'    #打印df -h含有/dev/sda2的行的第二区域

    \为转义符号 ---忽略符号的原有含义

date | awk ‘{print “Year:” $6 “\nMonth:” $2 }’

    #显示年月信息,\n 为换行符

df -h|awk '/dev/ {print NR,$2}'    # 匹配含有dev的行 显示行号并打印第二列

awk -F ":" '{print $2}' # 以:为分隔符打印第二列

awk 认为文件中每一行是一条记录 记录与记录的分隔符为空

awk [命令选项] `{}` [fliename]

-F fs    指定文件分隔符

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

awk '{print $1}' file

awk '{print $NF}' file

awk '{print $1,$3,$5}' file

head -l /etc/passwd | awk -F: '{print $1 "-" $3"-"$5}'

awk 'NR==3{print $0}NR==5{print $0}' file

awk -F : 'NR==1{print $1}' /etc/passwd

BEGIN END

awk 'BEGIN{print "hello"}{print $0}' file

awk 'END{print "hello"}{print $0}' file

awk 'BEGIN{print 100*100/20}'

awk 'BEGIN{A=1;B=2;print A+B}'

awk 'BEGIN{print 20^3}'

awk 'NR==1{t=$2}NR==2{f=$2;pfrint (t-f)*100/t}' /proc/meminfo |grep -F. '{print $1}'

+=累加

vim aa

1

2

3

4

awk '{sum += $1}END{print sum}' aa

cat /proc/25399/smaps |grep Rss|awk '{sum += $2}END{print sum}'

条件运算

比较运算

awk '$1>=2{print $0}' aa

awk '$1==2{print $0}' aa

awk '$1!=2{print $0}' aa

awk '$1<2{print $0}' aa

awk -F: '$1=="root"{print $0}' /etc/passwd

awk -F: '$1!="root"{print $0}' /etc/passwd

awk -F: '$1 ~ "ro"{print $0}' /etc/passwd

awk -F: '$1 ~ "^ro"{print $0}' /etc/passwd

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值